我需要看些什么来确定我使用的是Windows还是Unix等等?


当前回答

短篇小说

使用platform.system()。它返回Windows、Linux或Darwin(适用于OSX)。

很长的故事

Python中有3种操作系统,每种方法都有其优缺点:

方法1

>>> import sys
>>> sys.platform
'win32'  # could be 'linux', 'linux2, 'darwin', 'freebsd8' etc

它是如何工作的(来源):在内部调用OS api来获得OS定义的OS名称。有关各种特定于操作系统的值,请参见这里。

教授:没有魔法,低水平。

缺点:依赖于操作系统版本,所以最好不要直接使用。

方法2

>>> import os
>>> os.name
'nt'  # for Linux and Mac it prints 'posix'

它是如何工作的(源代码):它在内部检查python是否有名为posix或nt的特定于操作系统的模块。

优点:简单检查是否posix操作系统

缺点:Linux和OSX之间没有区别。

方法3

>>> import platform
>>> platform.system()
'Windows' # for Linux it prints 'Linux', Mac it prints `'Darwin'

这是如何工作的(来源):在内部,它最终会调用内部的操作系统api,获得特定于操作系统版本的名称,如'win32'或'win16'或'linux1',然后通过应用一些启发式方法规范化为更通用的名称,如'Windows'或'Linux'或'Darwin'。

优点:Windows, OSX和Linux的最佳便携方式。

缺点:Python人员必须保持规范化启发式是最新的。

总结

如果你想检查操作系统是Windows还是Linux或OSX,那么最可靠的方法是platform.system()。 如果你想通过内置的Python模块posix或nt进行特定于操作系统的调用,则使用os.name。 如果你想获得OS本身提供的原始OS名称,那么使用sys.platform。

其他回答

使用Python区分操作系统的示例代码:

import sys

if sys.platform.startswith("linux"):  # could be "linux", "linux2", "linux3", ...
    # linux
elif sys.platform == "darwin":
    # MAC OS X
elif os.name == "nt":
    # Windows, Cygwin, etc. (either 32-bit or 64-bit)

下面是Mac上的测试结果:

>>> import os
>>> os.name
'posix'
>>> import platform
>>> platform.system()
'Darwin'
>>> platform.release()
'8.11.1'

像下面这样一个简单的Enum实现怎么样?不需要外部库!

import platform
from enum import Enum
class OS(Enum):
    def checkPlatform(osName):
        return osName.lower()== platform.system().lower()

    MAC = checkPlatform("darwin")
    LINUX = checkPlatform("linux")
    WINDOWS = checkPlatform("windows")  #I haven't test this one

简单地,您可以使用Enum值访问

if OS.LINUX.value:
    print("Cool it is Linux")

附注:它是python3

使用platform.system ()

返回系统/操作系统名称,例如'Linux', 'Darwin', 'Java', 'Windows'。如果无法确定该值,则返回空字符串。

import platform
system = platform.system().lower()

is_windows = system == 'windows'
is_linux = system == 'linux'
is_mac = system == 'darwin'

Dang -路易斯白兰地打败了我的拳头,但这并不意味着我不能提供你的系统结果为Vista!

>>> import os
>>> os.name
'nt'
>>> import platform
>>> platform.system()
'Windows'
>>> platform.release()
'Vista'

...我不敢相信居然没有人发布Windows 10的版本:

>>> import os
>>> os.name
'nt'
>>> import platform
>>> platform.system()
'Windows'
>>> platform.release()
'10'