ChatGPT解决这个技术问题 Extra ChatGPT

如何在 Python 中检查操作系统?

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

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

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


L
Laurent LAPORTE

您可以使用 sys.platform

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

sys.platformsys.name 具有更精细的粒度。

有关有效值,请参阅 the documentation

另请参阅 “What OS am I running on?” 的答案


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

如果您想知道您在“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”。
R
Rob Watts

通过选中 sys.platform,您可以大致了解您正在使用的操作系统。

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

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


S
Sven Marnach

platform module 中提供了更多详细信息。


platform 模块是否比 sys.platform 有任何优势?我什么时候想使用哪种方法?
@matth:您可以从 platform 模块获得更详细的结构化信息。只需单击文档链接。
O
Ondrej Slinták

您可以使用 sys.platform