273

我找到了平台模块,但它说它返回“Windows”并且它在我的机器上返回“Microsoft”。我在stackoverflow 上的另一个线程中注意到它有时会返回“Vista”。

那么问题来了,如何实现?

if isWindows():
  ...

以向前兼容的方式?如果我必须检查诸如“Vista”之类的东西,那么当下一个版本的 Windows 出现时它就会中断。


注意:声称这是重复问题的答案实际上并未回答该问题isWindows。他们回答了“什么平台”的问题。由于存在许多风格的窗口,它们都没有全面描述如何获得答案isWindows

4

5 回答 5

431

Python操作系统模块

特别适用于 Python 3.6/3.7:

os.name: 导入的操作系统依赖模块的名称。当前已注册以下名称:“posix”、“nt”、“java”。

在您的情况下,您想检查 'nt' 作为os.name输出:

import os

if os.name == 'nt':
     ...

还有一个注释os.name

See也sys.platform有更精细的粒度。os.uname()给出与系统相关的版本信息。

平台模块提供对系统身份的详细检查。

于 2009-08-25T01:17:59.370 回答
68

你在用platform.system吗?

系统()
        返回系统/操作系统名称,例如“Linux”、“Windows”或“Java”。

        如果无法确定值,则返回空字符串。

如果这不起作用,也许可以尝试platform.win32_ver,如果它没有引发异常,那么你在 Windows 上;但我不知道这是否向前兼容 64 位,因为它的名称中有 32。

win32_ver(release='', version='', csd='', ptype='')
        从 Windows 注册表获取其他版本信息
        并返回一个引用版本的元组 (version,csd,ptype)
        编号、CSD 级别和操作系统类型(多/单
        处理器)。

os.name正如其他人所提到的,这可能是要走的路。


对于它的价值,这是他们在 platform.py 中检查 Windows 的一些方法:

if sys.platform == 'win32':
#---------
if os.environ.get('OS','') == 'Windows_NT':
#---------
try: import win32api
#---------
# Emulation using _winreg (added in Python 2.0) and
# sys.getwindowsversion() (added in Python 2.3)
import _winreg
GetVersionEx = sys.getwindowsversion
#----------
def system():

    """ Returns the system/OS name, e.g. 'Linux', 'Windows' or 'Java'.    
        An empty string is returned if the value cannot be determined.   
    """
    return uname()[0]
于 2009-08-25T01:22:43.247 回答
48

您应该能够依赖os .name。

import os
if os.name == 'nt':
    # ...

编辑:现在我想说最清楚的方法是通过平台模块,根据其他答案。

于 2009-08-25T01:18:46.497 回答
35

在 sys 中:

import sys
# its win32, maybe there is win64 too?
is_windows = sys.platform.startswith('win')
于 2009-08-25T01:21:45.713 回答
15
import platform
is_windows = any(platform.win32_ver())

或者

import sys
is_windows = hasattr(sys, 'getwindowsversion')
于 2014-04-02T18:33:57.040 回答