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')