我正在开发几个 Linux 工具,并且需要防止在 Windows 上安装,因为它依赖于 FHS,因此在该平台上变得无用。该platform.platform
函数接近但只返回一个字符串。
不幸的是,我不知道在该字符串中搜索什么才能产生可靠的结果。有人知道要搜索什么,或者有人知道我在这里缺少的另一个功能吗?
我正在开发几个 Linux 工具,并且需要防止在 Windows 上安装,因为它依赖于 FHS,因此在该平台上变得无用。该platform.platform
函数接近但只返回一个字符串。
不幸的是,我不知道在该字符串中搜索什么才能产生可靠的结果。有人知道要搜索什么,或者有人知道我在这里缺少的另一个功能吗?
>>> 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 本机和 Cygwin 应该是显而易见的,尽管我不相信这是未来的证明。
* 版本号分别针对 XP 和 Win7,不要依赖它们
在我的 Windows 机器上,platform.system()
返回'Windows'
.
但是,我不确定你为什么要打扰。如果你想在技术上限制它运行的平台,我会使用白名单而不是黑名单。
事实上,我根本不会在技术上这样做,因为也许 Python 的下一个版本可能有Win32/Win64
代替Windows
(用于黑名单)和*nix
代替Linux
(用于白名单)。
我的建议是简单地说明需求是什么,如果用户选择忽略它,那就是他们的问题。如果他们打电话说他们收到一条错误消息,指出“找不到 FHS”并且他们承认他们在 Windows 上运行,请轻轻地向他们指出这不是受支持的配置。
也许您的客户足够聪明,可以让 FHS 在 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
试试这个:
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 机器上完全等于“Windows”。
从help(platform)
system()
Returns the system/OS name, e.g. 'Linux', 'Windows' or 'Java'.
An empty string is returned if the value cannot be determined.