【问题标题】:When should I use os.name vs. sys.platform vs. platform.system()? [duplicate]我什么时候应该使用 os.name、sys.platform 和 platform.system()? [复制]
【发布时间】:2013-10-01 19:30:36
【问题描述】:

至少有三种方法可以在 Python 中检测操作系统/平台。

每种方法的理想应用是什么?什么时候应该使用一种方法而不是另一种方法?


编辑:我的具体用例是安装时和运行时检查依赖项。如果我在“Windows”上,我不想在setup.py 中安装某些库,因为它需要 Visual Studio。然后,在运行时我想检查依赖项是否可用(它可能不在“Windows”上)。

编辑 2:如果需要每个级别的操作系统详细信息,也可以看到一个简短的示例。

【问题讨论】:

  • 一个重要的问题是,您为什么需要知道?在 Python 中添加特定于平台的行为通常是不必要的。
  • @SteveHoward 可能用于查找第三方库或用户目录。考虑到 Python 鼓励用一种方式做事,这很奇怪。
  • @SteveHoward 我的具体用例是安装时和运行时检查依赖项。如果是“Windows”,我不想在setup.py 中安装某些库,因为它需要 Visual Studio。然后我想在运行时检查依赖项是否可用(它可能不在“Windows”上)。
  • @LegoStormtroopr 我刚刚发现,但该问题没有公认的答案,最高票数也没有说明platform.system() 的使用。
  • 对我来说,os.name => 'nt'sys.platform => 'win32'platform.system() => 'Windows'

标签: python operating-system


【解决方案1】:

这取决于您需要多少信息。

os.name 只会让您大致了解您所处的环境(例如 POSIX 与 Windows NT) - 甚至不是操作系统名称。文档说:

另请参阅sys.platform 具有更精细的粒度。 os.uname() 提供与系统相关的版本信息。 平台模块提供对系统身份的详细检查。

sys.platform 为您提供更多信息,例如,实际上可以告诉您您运行的是 Linux 还是 FreeBSD。

platform 模块将为您提供最多信息,包括您正在运行的操作系统版本和处理器信息。

因此,您应该具体说明您要完成的工作,然后可能会清楚哪种方法最合适。

【讨论】:

  • 我用我的具体用例更新了这个问题。
  • 随便用什么都行。 os.name 将在 Windows 上为您提供 nt,在其他任何地方都没有。因此,如果这就是您所需要的,那么就使用它。再多想,你就是在浪费时间。
猜你喜欢
  • 2011-05-31
  • 2012-03-18
  • 1970-01-01
  • 2019-11-15
  • 2014-08-31
  • 2013-10-31
  • 2019-12-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多