在Python中可靠地检测Windows
我正在研究几个Linux工具,并且需要防止在Windows上安装,因为它依赖于FHS,因此在该平台上变得毫无用处。 platform.platform
函数接近,但只返回一个string。
不幸的是,我不知道在这个string中search什么,以获得可靠的结果。 有谁知道要search什么或有人知道我在这里失踪的另一个function?
>>> import platform >>> platform.system() 'Windows'
对于那些来这里寻找一种方法来检测来自Python的Cygwin(而不仅仅是检测Windows),下面是在不同平台上os.name
和platform.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.