我正在研究几个Linux工具,并且需要防止在Windows上安装,因为它依赖于FHS,因此在该平台上无用。 platform.platform
函数接近,但只返回一个字符串。在Python中可靠地检测Windows
不幸的是,我不知道该字符串中搜索的内容是否可以产生可靠的结果。有没有人知道要搜索什么或有人知道我在这里失踪的另一个功能?
我正在研究几个Linux工具,并且需要防止在Windows上安装,因为它依赖于FHS,因此在该平台上无用。 platform.platform
函数接近,但只返回一个字符串。在Python中可靠地检测Windows
不幸的是,我不知道该字符串中搜索的内容是否可以产生可靠的结果。有没有人知道要搜索什么或有人知道我在这里失踪的另一个功能?
>>> import platform
>>> platform.system()
'Windows'
试试这个:
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”。
在我的Windows机器上,platform.system()
返回'Windows'
。
但是,我不知道为什么你会打扰。如果你想限制它在技术上运行的平台,我会使用白名单而不是黑名单。
其实,我也不会做技术,因为在所有的Python可能的下一个版本可能有Win32/Win64
而不是Windows
(黑色上市)和*nix
代替Linux
(白上市)。
我的建议是简单说明需求是什么,如果用户选择忽略它,那就是他们的问题。如果他们说他们收到了一条错误消息,指出“无法找到FHS”,并且他们承认他们正在Windows上运行,则轻轻地向他们指出这不是受支持的配置。
也许你的客户很聪明,让FHS在Windows下运行,这样你的代码就可以工作。他们不太可能欣赏他们认为对软件的任意限制。
这是软件开发人员每天都面临的问题。即使是庞大的组织也无法支持每个单一平台和配置。
+1,很好的答案,我同意。检测到FHS不可用是一种比检测操作系统和做出假设更好的方法,并且它更安全(毕竟,有人在你的平台上限制破解将会失败*!)。 – 2009-09-07 01:56:33
+1,是的白名单是最好的,因为角落案件是讨厌的。在Windows下运行Cygwin,我得到'platform.system()'返回'CYGWIN_NT-5.2-WOW64'。那不会是我的第一个猜测! – 2009-09-07 10:07:43
从帮助(平台)
system()
Returns the system/OS name, e.g. 'Linux', 'Windows' or 'Java'.
An empty string is returned if the value cannot be determined.
>>> import os
>>> os.name
'nt'
“进口依赖操作系统模块的名称下列名称当前已注册的: 'POSIX', 'NT',“ mac','os2','ce','java','riscos'。“(三)http://docs.python.org/library/os.html#os.name
import os
if os.name == 'nt':
#yourcodehere
至少在我的机器上''os.name'在Cygwin下运行时返回'posix',在本地窗口下运行时'nt'构建 – sbk 2011-10-03 16:04:26
是的,Cygwin是一种痛苦,但对于原始故事这种行为被接受(如果不需要)。 – 2012-11-22 12:02:24
对于那些来到这里寻找一种方式,从Python的(而不是仅仅检测Windows)中检测到Cygwin的,这里有来自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本地和Cygwin区分应该是显而易见的,虽然我不相信这是面向未来的。
*版本号是XP和Win7 respecti真的,不要依赖他们
我的Cygwin显示“Windows”。 – 2012-06-01 22:10:29
@JaceBrowning:足够公平的,我们可能使用不同版本的Cygwin或Python ...这是“not-futureproof”笔记出现的地方:) – sbk 2012-06-04 13:28:55
区别在于我的Python安装可能是Windows的一部分,而不是Cygwin的? – 2012-06-04 17:49:19
我也没有Windows方便,但这个函数返回我的电脑上的'Linux'。这些文档似乎提到了'Windows',所以我想我会继续这样做,并希望它涵盖所有情况。 – blokkie 2009-09-07 01:34:36
它应该。见Pax的答案。 – 2009-09-07 01:35:45
啊,你的编辑清除了它。多谢。 – blokkie 2009-09-07 01:50:18