sys.platform的可能取值是什么?

104

以下命令可能返回哪些值?

import sys
print sys.platform

我知道有很多可能性,因此我主要关注“主要”操作系统(Windows、Linux、Mac OS)。


1
请查看http://docs.python.org/2/library/sys.html#sys.platform。 - Dennis
4
请参考Python 3.9文档中的 https://docs.python.org/3.9/library/sys.html#sys.platform - Ashish Singh
5个回答

187
┍━━━━━━━━━━━━━━━━━━━━━┯━━━━━━━━━━━━━━━━━━━━━┑
│ System              │ Value               │
┝━━━━━━━━━━━━━━━━━━━━━┿━━━━━━━━━━━━━━━━━━━━━┥
│ Linux               │ linux or linux2 (*) │
│ Windows             │ win32               │
│ Windows/Cygwin      │ cygwin              │
│ Windows/MSYS2       │ msys                │
│ Mac OS X            │ darwin              │
│ OS/2                │ os2                 │
│ OS/2 EMX            │ os2emx              │
│ RiscOS              │ riscos              │
│ AtheOS              │ atheos              │
│ FreeBSD 7           │ freebsd7            │
│ FreeBSD 8           │ freebsd8            │
│ FreeBSD N           │ freebsdN            │
│ OpenBSD 6           │ openbsd6            │
│ AIX                 │ aix (**)            │
┕━━━━━━━━━━━━━━━━━━━━━┷━━━━━━━━━━━━━━━━━━━━━┙

(*) 在 Python 3.3 之前,任何 Linux 版本的值始终为 linux2;在此之后,它是 linux

(**) 在 Python 3.8 之前,也可以是 aix5aix7;使用 sys.platform.startswith()


5
你应该列一个清单。 - Benjamin Paap
8
截至目前为止,这可能是最有用的答案。对于漂亮的 ASCII 艺术电子表格,额外加分。 - Cecil Curry
2
当前的 macOS 系统怎么样?它们仍然解析为 darwin 吗? - blubberdiblub
1
我得到了“linux”。 - vidstige
1
@blubberdiblub 是的。 - Michael Leonard
显示剩余6条评论

40

苹果电脑操作系统 Mac OS X (10.4、10.5、10.7、10.8):

darwin

Linux(2.6内核):

linux2

Windows XP 32位:

win32

方括号中的版本已经过检查 - 其他/更新的版本可能相同。


OS X版本高于10.5的呢?它们也被标记为“darwin”吗?Linux内核版本高于2.6呢?Windows版本高于XP呢? - Dennis
@Dennis在回答中澄清了 - 我列出的版本是我已经检查过的。我几乎可以确定所有的OS X版本都将是darwin,所有2.x的Linux内核都将是linux2,而Windows将是win32或win64..但是,我还没有检查过。 - dbr
1
较新版本的Linux可能会使用“linux3”而不是“linux2”。 - MarioVilas
4
Python在Linux 3内核上仍然坚持使用linux2,因为在Python的角度看来,两个版本没有区别。 - Martijn Pieters
4
在64位Windows上,安装了64位的Python版本时,输出也会显示为“win32”。使用platform.system()可能是一个更少令人困惑的解决方法(区分“Windows”和“Linux”)。 - Daniel F
列表更大,而且没有明确的文档(https://docs.python.org/2/library/sys.html),例如在OpenBSD中是“openbsd6”。 - rfmoz

22

正如其他人所指出的,sys.platform是从系统供应商给他们的系统命名而来。然而,Python还向sys.path添加了plat-,因此您可以查看Python分发中的所有plat-*目录。

这给出了以下列表

aix3 aix4 atheos beos5 darwin freebsd2 freebsd3 freebsd4 freebsd5 freebsd6 freebsd7 generic irix5 irix6 linux2 mac netbsd1 next3 os2emx riscos sunos5 unixware7

当然,当Python在尚未创建特定于平台的目录的系统上编译时,sys.platform可能会有其他值。

来自这里


6
通过查看源代码,可以找到几个常见的操作系统:win32os2unknown - Nicklas A.
8
在Python 3.3及以上版本中,linux2被改为linux来源 - Michael Platings
3
@Deqing:三年后终于修好了 :) - xOneca

9

FreeBSD 7.0的标识是freebsd7。在FreeBSD8上进行构建,但使用的可能是之前的版本,答案相同。

因此,请注意获取用于构建的平台,不一定是您正在运行的平台。


1
截至2013年12月29日,OS X 10.9.1 Mavericks仍然被标记为Darwin。

1
Darwin是OS X内核。要获取OS X版本号,请使用platform.mac_ver() - wolfd

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