【问题标题】:How do I check the operating system in Python?如何在 Python 中检查操作系统?
【发布时间】:2026-01-27 08:00:01
【问题描述】:

我想检查操作系统(在运行脚本的计算机上)。

我知道我可以在 Linux 中使用 os.system('uname -o'),但它在控制台中给了我一条消息,我想写入一个变量。

如果脚本可以判断它是 Mac、Windows 还是 Linux,那就没问题了。我怎样才能检查它?

【问题讨论】:

标签: python linux operating-system


【解决方案1】:

您可以使用sys.platform

【讨论】:

    【解决方案2】:

    您可以通过查看sys.platform 来大致了解您正在使用的操作系统。

    获得该信息后,您可以使用它来确定调用 os.uname() 之类的名称是否适合收集更具体的信息。您还可以在类 unix 的操作系统上使用 Python System Information 之类的东西,或者在 Windows 上使用 pywin32 之类的东西。

    如果您想在不关心操作系统的情况下进行更深入的检查,还有psutil

    【讨论】:

      【解决方案3】:

      你可以使用sys.platform:

      from sys import platform
      if platform == "linux" or platform == "linux2":
          # linux
      elif platform == "darwin":
          # OS X
      elif platform == "win32":
          # Windows...
      

      sys.platform 的粒度比sys.name 更细。

      有关有效值,请咨询the documentation

      另见“What OS am I running on?”的答案

      【讨论】:

      • 请注意,在 cygwin 中,它返回 "cygwin" 而不是 "win32",正如人们所期望的那样。
      • 谢谢。 linux和linux2有什么区别?
      • BSD 的输出是什么?
      • 请注意,从 Python 3.3 开始,"linux2" 不再是 platform 的可能值(请参阅链接文档以获取佐证),因此如果您只需要支持 Python 3.3 及更高版本,您可以放心从第一个条件中删除 ` or platform == "linux2"` 子句。
      • @ohailolcat ,用于向后兼容。它可能永远不会改变。请参阅以这种方式定义它的原始补丁以获取更多信息:mail.python.org/pipermail/patches/2000-May/000648.html
      【解决方案4】:

      更多详细信息请参见platform module

      【讨论】:

      • platform 模块比sys.platform 有什么优势吗?我什么时候想使用哪种方法?
      • @matth:您可以从platform 模块获得更详细的结构化信息。只需单击文档链接即可。
      【解决方案5】:

      如果您想知道您在“Linux”、“Windows”或“Darwin”(Mac)之外的哪个平台上,没有更精确的,您应该使用:

      >>> import platform
      >>> platform.system()
      'Linux'  # or 'Windows'/'Darwin'
      

      platform.system 函数在内部使用uname

      【讨论】:

      • 我喜欢这个解决方案,但我想指出,从文档中它声明它将返回 LinuxWindowsJava 或空字符串。devdocs.io/python~3.7/library/platform#platform.system
      • @BrandonBenefield,枚举是可能值的一个示例。在 Apple 设备上,它返回“Darwin”。