可靠地在Python中检测Windows

时间:2009-09-07 01:29:17

标签: python windows platform-detection

我正在研究几种Linux工具,需要阻止在Windows上安装,因为它依赖于FHS,因此在该平台上无用。 platform.platform函数接近但只返回一个字符串。

不幸的是,我不知道在该字符串中搜索什么以获得可靠的结果。有谁知道要搜索什么,或者有人知道我在这里缺少的另一个功能吗?

6 个答案:

答案 0 :(得分:70)

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

答案 1 :(得分:51)

对于那些来自这里寻找从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应该是显而易见的,虽然我不相信这是未来的证明。

*版本号分别适用于XP和Win7,不依赖于它们

答案 2 :(得分:17)

在我的Windows框中,platform.system()返回'Windows'

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

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

我的建议是简单说明要求是什么,如果用户选择忽略它,那就是他们的问题。如果他们打电话说他们收到一条错误消息,说“无法找到FHS”并且他们承认他们在Windows上运行,请轻轻地向他们指出它不是受支持的配置。

也许您的客户足够聪明,可以在Windows下运行FHS,以便您的代码能够正常运行。他们不太可能会欣赏他们认为会对您的软件进行任意限制的内容。

这是软件开发人员每天都面临的问题。即使是庞大的组织也无法支持每个单一平台和配置。

答案 3 :(得分:10)

试试这个:

import platform

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

修改:刚看到您尝试platform.platform() ... platform.system()在这种情况下效果会更好。相信我,使用它。黑暗角落在平台探测中。

distutils也会这样做,如果你问得好的话。

你总是可以在Windows文件上做os.path.exists()之类的错误......但是platform和Python标准库一样可靠。

编辑2:另一个有用的回答者指出platform.system()与Windows机器上的“Windows”完全相同。

答案 4 :(得分:8)

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

答案 5 :(得分:2)

来自帮助(平台)

system()
    Returns the system/OS name, e.g. 'Linux', 'Windows' or 'Java'.

    An empty string is returned if the value cannot be determined.