在Python可靠地检测的Windows(Reliably detect Windows in Py

2019-07-05 06:00发布

我工作的一对夫妇的Linux工具和需要,以防止Windows安装,因为它取决于FHS,并因此变得毫无用处在该平台上。 该platform.platform功能接近,但只返回一个字符串。

不幸的是,我不知道该怎么寻找在该字符串为它产生可靠的结果。 有谁知道该怎么寻找或有没有人知道我在这里失踪的另一个功能?

Answer 1:

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


Answer 2:

对于那些来到这里寻找一种方式,从Python的检测Cygwin的(而不是仅仅探测窗),这里有一些例子返回值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本地和Cygwin区分应该是显而易见的。

*版本号是XP和Win7的分别,不靠他们



Answer 3:

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

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

其实,我也不会做技术,因为在所有的Python可能的下一个版本可能Win32/Win64 ,而不是Windows (黑色上市)和*nix ,而不是Linux (白上市)。

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

也许你的客户有足够的智慧来获得FHS在Windows下运行,使您的代码将工作。 他们不可能欣赏自己会再考虑你的软件的任意限制。

这是每天都面临的软件开发者的一个问题。 即使是庞大的组织无法支持一个平台,并配置在那里。



Answer 4:

试试这个:

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机器上。



Answer 5:

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


Answer 6:

从帮助(平台)

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

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


文章来源: Reliably detect Windows in Python