我工作的一对夫妇的Linux工具和需要,以防止Windows安装,因为它取决于FHS,并因此变得毫无用处在该平台上。 该platform.platform
功能接近,但只返回一个字符串。
不幸的是,我不知道该怎么寻找在该字符串为它产生可靠的结果。 有谁知道该怎么寻找或有没有人知道我在这里失踪的另一个功能?
我工作的一对夫妇的Linux工具和需要,以防止Windows安装,因为它取决于FHS,并因此变得毫无用处在该平台上。 该platform.platform
功能接近,但只返回一个字符串。
不幸的是,我不知道该怎么寻找在该字符串为它产生可靠的结果。 有谁知道该怎么寻找或有没有人知道我在这里失踪的另一个功能?
>>> import platform
>>> platform.system()
'Windows'
对于那些来到这里寻找一种方式,从Python的检测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的分别,不靠他们
在我的Windows中, platform.system()
返回'Windows'
。
但是,我不知道为什么你会烦。 如果你想限制它运行在技术平台上,我会使用白名单,而不是黑名单。
其实,我也不会做技术,因为在所有的Python可能的下一个版本可能Win32/Win64
,而不是Windows
(黑色上市)和*nix
,而不是Linux
(白上市)。
我的建议是简单地说明什么要求,如果用户选择忽略,那是他们的问题。 如果他们打电话说,他们得到了一个错误消息,指出“无法找到FHS”,他们承认,他们在Windows上运行,轻轻点出他们,这不是一个支持的配置。
也许你的客户有足够的智慧来获得FHS在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
会就此别过,如果你问好听。
你总是可以做喜欢的事,不好的os.path.exists()
在Windows文件...但platform
是可靠的,因为它在Python标准库得到。
编辑2:另一个有用的回答者指出platform.system()
正好等于“视窗”他的Windows机器上。
>>> import os
>>> os.name
'nt'
“进口的依赖操作系统模块的名称下列名称当前已注册的:‘POSIX’,‘NT’,‘MAC’,‘OS2’,‘CE’,‘Java的’,‘里斯科斯’。” (c)中http://docs.python.org/library/os.html#os.name
import os
if os.name == 'nt':
#yourcodehere
从帮助(平台)
system()
Returns the system/OS name, e.g. 'Linux', 'Windows' or 'Java'.
An empty string is returned if the value cannot be determined.