62

我正在开发几个 Linux 工具,并且需要防止在 Windows 上安装,因为它依赖于 FHS,因此在该平台上变得无用。该platform.platform函数接近但只返回一个字符串。

不幸的是,我不知道在该字符串中搜索什么才能产生可​​靠的结果。有人知道要搜索什么,或者有人知道我在这里缺少的另一个功能吗?

4

6 回答 6

88
>>> import platform
>>> platform.system()
'Windows'
于 2009-09-07T01:33:31.370 回答
67

对于那些来这里寻找从 Python 检测 Cygwin 的方法(而不仅仅是检测 Windows)的人,这里有一些来自不同平台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,不要依赖它们

于 2011-10-03T16:18:44.180 回答
16

在我的 Windows 机器上,platform.system()返回'Windows'.

但是,我不确定你为什么要打扰。如果你想在技术上限制它运行的平台,我会使用白名单而不是黑名单。

事实上,我根本不会在技术上这样做,因为也许 Python 的下一个版本可能有Win32/Win64代替Windows(用于黑名单)和*nix代替Linux(用于白名单)。

我的建议是简单地说明需求是什么,如果用户选择忽略它,那就是他们的问题。如果他们打电话说他们收到一条错误消息,指出“找不到 FHS”并且他们承认他们在 Windows 上运行,请轻轻地向他们指出这不是受支持的配置。

也许您的客户足够聪明,可以让 FHS 在 Windows 下运行,这样您的代码才能正常工作。他们不太可能理解他们会认为您的软件的任意限制。

这是软件开发人员每天都面临的问题。即使是大型组织也无法支持每个平台和配置。

于 2009-09-07T01:32:49.250 回答
12
>>> 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
于 2011-02-01T17:23:47.043 回答
11

试试这个:

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

于 2009-09-07T01:31:03.567 回答
1

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.
于 2010-08-12T15:24:22.607 回答