我需要看些什么来确定我使用的是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。

其他回答

短篇小说

使用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。

/usr/bin/python3.2

def cls():
    from subprocess import call
    from platform import system

    os = system()
    if os == 'Linux':
        call('clear', shell = True)
    elif os == 'Windows':
        call('cls', shell = True)

你也可以只使用平台模块而不导入os模块来获取所有信息。

>>> import platform
>>> platform.os.name
'posix'
>>> platform.uname()
('Darwin', 'mainframe.local', '15.3.0', 'Darwin Kernel Version 15.3.0: Thu Dec 10 18:40:58 PST 2015; root:xnu-3248.30.4~1/RELEASE_X86_64', 'x86_64', 'i386')

可以使用下面这行代码创建一个漂亮整洁的布局:

for i in zip(['system','node','release','version','machine','processor'],platform.uname()):print i[0],':',i[1]

给出如下输出:

system : Darwin
node : mainframe.local
release : 15.3.0
version : Darwin Kernel Version 15.3.0: Thu Dec 10 18:40:58 PST 2015; root:xnu-3248.30.4~1/RELEASE_X86_64
machine : x86_64
processor : i386

通常缺少的是操作系统版本,但你应该知道如果你运行的是windows, linux或mac,一个平台独立的方法是使用这个测试:

In []: for i in [platform.linux_distribution(),platform.mac_ver(),platform.win32_ver()]:
   ....:     if i[0]:
   ....:         print 'Version: ',i[0]

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'
>>> import os
>>> os.name
'posix'
>>> import platform
>>> platform.system()
'Linux'
>>> platform.release()
'2.6.22-15-generic'

platform.system()的输出如下:

Linux: Linux 麦克:达尔文 Windows:

参见:平台-访问底层平台的识别数据