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

283

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

我知道在Linux中可以使用os.system('uname -o'),但它会在控制台输出信息,而我想要将其写入变量。

如果脚本能告诉我它是Mac、Windows还是Linux,那就没问题了。我该怎么检查呢?


3
可能是重复的问题:如何在Python中确定正在运行的操作系统? - BoltClock
1
可能是Python:我正在运行什么操作系统?的重复提问。 - TylerH
5个回答

525
您可以使用 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更细。

要查看有效值,请参阅文档

另请参见回答:“我正在运行什么操作系统?”


11
请注意,在cygwin中,它返回"cygwin"而不是某些人可能期望的"win32" - Michał Bentkowski
38
谢谢。Linux和Linux2有什么区别? - Tharindu Rusira
1
BSD 的输出会是什么? - galois
17
请注意,自Python 3.3以来,“linux2”不再是“platform”可能的取值之一(请参阅相关文档以确认),因此如果您只需要支持Python 3.3及更高版本,则可以安全地从第一个条件中删除“或platform ==“ linux2””子句。 - Mark Amery
1
如果 sys.platform.startswith('freebsd') - Tatarize
显示剩余3条评论

55

如果你想知道你正在使用的平台是“Linux”、“Windows”还是“Darwin”(Mac),而没有更多的精确信息,那么你应该使用:

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

platform.system函数内部使用uname


2
我喜欢这个解决方案,但我想指出从文档中可以看到它将返回 LinuxWindowsJava 或一个空字符串。https://devdocs.io/python~3.7/library/platform#platform.system - Brandon Benefield
4
@BrandonBenefield,枚举是可能值的示例。在苹果设备上,它返回“Darwin”。 - Laurent LAPORTE

16
你可以通过检查 sys.platform 来大致确定你正在使用的操作系统。一旦获得这些信息,你就可以使用它来确定是否适合调用类似 os.uname() 来收集更具体的信息。对于类 Unix 的操作系统,你还可以使用像 Python 系统信息 这样的东西,对于 Windows,你可以使用 pywin32。如果你想进行更深入的检查而不必关心操作系统,则可以使用 psutil

os.uname()在Windows上返回一个错误:>>> os.uname() Traceback (most recent call last): File "<stdin>", line 1, in <module> AttributeError: module 'os' has no attribute 'uname'. 你是不是想说:'name'? - kristianp
os.uname()在Windows上返回一个错误:>>> os.uname() Traceback (most recent call last): File "<stdin>", line 1, in <module> AttributeError: module 'os' has no attribute 'uname'. 你是不是想说:'name'? - undefined

7

platform 模块是否比 sys.platform 有任何优势?我应该在什么情况下使用哪种方法? - matth
@matth:您可以从platform模块获得更详细、更有结构化的信息。只需点击文档链接即可。 - Sven Marnach

5

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接