在Python中可靠地检测Windows

我正在研究几个Linux工具,并且需要防止在Windows上安装,因为它依赖于FHS,因此在该平台上变得毫无用处。 platform.platform函数接近,但只返回一个string。

不幸的是,我不知道在这个string中search什么,以获得可靠的结果。 有谁知道要search什么或有人知道我在这里失踪的另一个function?

 >>> import platform >>> platform.system() 'Windows' 

对于那些来这里寻找一种方法来检测来自Python的Cygwin(而不仅仅是检测Windows),下面是在不同平台上os.nameplatform.system一些返回值的示例

 OS/build | os.name | platform.system() -------------+---------+----------------------- Win32 native | nt | Windows Win32 cygwin | posix | CYGWIN_NT-5.1* Win64 native | nt | Windows Win64 cygwin | posix | CYGWIN_NT-6.1-WOW64* Linux | posix | Linux 

从这一点来说,如何区分Windows native和Cygwin应该是显而易见的,尽pipe我不相信这是未来的certificate。

*版本号分别为XP和Win7,不要依赖它们

在我的Windows机器上, platform.system()返回'Windows'

但是,我不确定你为什么打扰。 如果你想限制它在技术上运行的平台,我会使用白名单而不是黑名单。

事实上,我不会在技术上做到这一点,因为也许下一个版本的Python可能有Win32/Win64而不是Windows (用于黑名单)和*nix而不是Linux (用于白名单)。

我的build议是简单说明需求是什么,如果用户select忽略这一点,那就是他们的问题。 如果他们说,他们得到了一个错误消息,说“无法findFHS”,他们承认他们在Windows上运行,温柔地指出,这不是一个受支持的configuration。

也许你的客户很聪明,让FHS在Windows下运行,这样你的代码就可以工作了。 他们不太可能欣赏他们认为对软件的任意限制。

这是软件开发人员每天都要面对的问题。 即使是巨大的组织也无法支持一个平台和configuration。

尝试这个:

 import platform if platform.system() == "Darwin": # Don't have Windows handy, but I'd expect "Win32" or "Windows" for it 

编辑:只是看到你尝试了platform.platform()platform.system()将更好地为这种情况下工作。 相信我,使用它。 黑暗的angular落在平台检测。

如果你distutils也会这样做。

你总是可以在Windows文件上做类似os.path.exists()事情,但platform和Python标准库一样可靠。

编辑2:另一个有用的回答指出platform.system()是完全等于他的Windows机器上的“Windows”。

 >>> import os >>> os.name 'nt' 

“导入操作系统相关模块的名称,目前已经注册了以下名称:”posix“,”nt“,”mac“,”os2“,”ce“,”java“,”riscos“。 (c) http://docs.python.org/library/os.html#os.name

 import os if os.name == 'nt': #yourcodehere 

从帮助(平台)

 system() Returns the system/OS name, eg 'Linux', 'Windows' or 'Java'. An empty string is returned if the value cannot be determined.