os.name sys.platform platform.system()

1: sys.platform与os.name 在编译时就已经决定了,在源码里相当于一个常量, platform.system() 是运行时结果,是根据具体宿主系统调用系统命令显示的值, 实际是调用 uname -a

2:os.name 是粗粒度的系统名,比如属于哪个平台,属于'posix', 'nt', 'os2', 'ce' or 'riscos'等,POSIX下面有很多具体系统了,什么linux ,bsd了,这就需要sys.platform  platform.system() 两个中的一个,更详细的告诉我是哪个系统类型。

3:细粒度时,sys.platform  platform.system()到底选哪个那?

使用os.name 检测是否是posix兼容的系统, 使用sys,platform 检测 是否是一个linux, cygwin, darwin, atheos

Note:python3.3+ On Linux,sys.platform doesn’t contain the major version anymore. It is always 'linux', instead of'linux2'or'linux3'

python3.3+ 在linux上 sys.platform返回值不在包含版本信息,总是返回linux,为了兼容性,通常写成

sys.platform.startswith('linux')

如果对sys.platform的结果不放心,都可以使用platform.system(), 在内部使用了os.uname() 命令


事实还有一个os.uname(),它返回运行时系统更详细的信息,如下:

 os.uname()

('Linux', 'T450',  '4.4.0-83-generic',  '#106-Ubuntu SMP Mon Jun 26 17:54:43 UTC 2017',  'x86_64')

推荐阅读更多精彩内容