我正在使用几个Linux工具,需要防止在Windows上安装,因为它依赖于FHS,因此在该平台上无法使用。platform.platform函数接近,但只返回一个字符串。不幸的是,我不知道该在字符串中搜索什么才能得到可靠的结果,有人知道该搜索什么吗,或者有人知道我这里遗漏的另一个函数吗?
platform.platform
ocebsuys1#
>>> import platform >>> platform.system() 'Windows'
k2fxgqgv2#
对于那些来这里寻找从Python中检测Cygwin的方法(而不仅仅是检测Windows)的人,这里有一些来自不同平台上os.name和platform.system的返回值示例
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 native和Cygwin应该是显而易见的,尽管我不相信这是未来的证据。
xoshrz7s3#
在我的Windows机器上,platform.system()返回'Windows'。但是,我不知道你为什么要这么做,如果你想在技术上限制它运行的平台,我会使用白名单而不是黑名单。事实上,我根本不会在技术上这样做,因为也许下一个Python版本可能会有Win32/Win64而不是Windows(用于黑名单)和*nix而不是Linux(用于白名单)。我的建议是简单地说明需求是什么,如果用户选择忽略这一点,那是他们的问题。如果他们打电话说他们收到了一条错误消息,指出“找不到FHS”,他们承认他们在Windows上运行,温和地向他们指出这是不支持的配置。也许你的客户很聪明,他们会让FHS在Windows下运行,这样你的代码就可以正常工作了。他们不太可能意识到他们会认为你的软件有什么任意的限制。这是软件开发人员每天都要面对的问题。即使是大型组织也无法支持 * 每一个 * 单一平台和配置。
platform.system()
'Windows'
Win32/Win64
Windows
*nix
Linux
7dl7o3gd4#
>>> 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
lymnna715#
试试这个:
import platform if platform.system() == "Darwin": # Don't have Windows handy, but I'd expect "Win32" or "Windows" for it
**编辑:**刚刚看到你试过platform.platform() ... platform.system()会更适合这种情况。相信我,使用它。黑暗的角落在于平台检测。
platform.platform()
distutils也会这样做,如果你要求它很好。你总是可以在Windows文件上做一些不好的事情,比如os.path.exists() ......但是platform和Python标准库中的一样可靠。
distutils
os.path.exists()
platform
**编辑2:**另一个有用的回答者指出,platform.system()在他的Windows机器上完全等于“Windows”。
mrfwxfqh6#
从help(platform)
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.
6条答案
按热度按时间ocebsuys1#
k2fxgqgv2#
对于那些来这里寻找从Python中检测Cygwin的方法(而不仅仅是检测Windows)的人,这里有一些来自不同平台上
os.name
和platform.system
的返回值示例从这一点来看,如何区分Windows native和Cygwin应该是显而易见的,尽管我不相信这是未来的证据。
xoshrz7s3#
在我的Windows机器上,
platform.system()
返回'Windows'
。但是,我不知道你为什么要这么做,如果你想在技术上限制它运行的平台,我会使用白名单而不是黑名单。
事实上,我根本不会在技术上这样做,因为也许下一个Python版本可能会有
Win32/Win64
而不是Windows
(用于黑名单)和*nix
而不是Linux
(用于白名单)。我的建议是简单地说明需求是什么,如果用户选择忽略这一点,那是他们的问题。如果他们打电话说他们收到了一条错误消息,指出“找不到FHS”,他们承认他们在Windows上运行,温和地向他们指出这是不支持的配置。
也许你的客户很聪明,他们会让FHS在Windows下运行,这样你的代码就可以正常工作了。他们不太可能意识到他们会认为你的软件有什么任意的限制。
这是软件开发人员每天都要面对的问题。即使是大型组织也无法支持 * 每一个 * 单一平台和配置。
7dl7o3gd4#
“导入的操作系统相关模块的名称。下列名称当前已注册:'posix',' nt','mac',' os2','ce',' java','riscos'.”(c)http://docs.python.org/library/os.html#os.name
lymnna715#
试试这个:
**编辑:**刚刚看到你试过
platform.platform()
...platform.system()
会更适合这种情况。相信我,使用它。黑暗的角落在于平台检测。distutils
也会这样做,如果你要求它很好。你总是可以在Windows文件上做一些不好的事情,比如
os.path.exists()
......但是platform
和Python标准库中的一样可靠。**编辑2:**另一个有用的回答者指出,
platform.system()
在他的Windows机器上完全等于“Windows”。mrfwxfqh6#
从
help(platform)