【问题标题】:How to check if OS is Vista in Python?如何在 Python 中检查操作系统是否是 Vista?
【发布时间】:2010-09-16 20:25:51
【问题描述】:

如何使用 Python 和 pywin32wxPython 以最简单的方式区分 Windows XP 和 Windows Vista?

基本上,如果当前操作系统是 Vista,我需要一个调用将返回 True 的函数:

>>> isWindowsVista()
True

【问题讨论】:

  • 请注意,如果您只对 windows vs linux 等感兴趣,您可以使用if os.name=="nt":

标签: python windows windows-vista wxpython pywin32


【解决方案1】:

Python 有一个可爱的“平台”模块来帮助你。

>>> import platform
>>> platform.win32_ver()
('XP', '5.1.2600', 'SP2', 'Multiprocessor Free')
>>> platform.system()
'Windows'
>>> platform.version()
'5.1.2600'
>>> platform.release()
'XP'

注意:如 cmets 中所述,使用旧版本的 python 时可能不会返回正确的值。

【讨论】:

  • Python 2.5.2 在 Vista 中对 platform.win32_ver() 说 ('', '', '', ''),但 Python 2.6 正确响应 'Vista'。谢谢!
  • 最佳且清晰。请注意,您的程序今天可能无法运行,因为 win7 发布并且它也是 6.1
  • 正如 Ahmet 所指出的,如果您在 Windows 7 上运行旧版本的 Python,这将不起作用。Python 2.5.4 在 Windows 7 上返回以下内容:platform.release() => 'Vista'platform.win32_ver() => ('', '6.1.7600', '', 'Multiprocessor Free')。鉴于 2.5 已经过时,这并不奇怪,但需要注意一些事情。
  • @sam 解释它没有问题,您查看 6.1.7600 并确定 6.1 表示 Windows 7。Vista 将是 6.0。
  • 平台模块非常可爱。实际上我认为它几乎没用:它没有为您提供可移植且可用的 API 来确定您使用的平台版本。
【解决方案2】:

Twisted中使用的解决方案,不需要pywin32:

def isVista():
    if getattr(sys, "getwindowsversion", None) is not None:
        return sys.getwindowsversion()[0] == 6
    else:
        return False

请注意,它也将匹配 Windows Server 2008。

【讨论】:

  • 谢谢!我不介意使用 pywin32 或 wxPython(无论如何我都导入了它们),但我想确保操作系统是 Vista。我对 Server 2008 了解不多,所以我不希望我的 Vista 特定代码在其上运行。
  • 我不明白赞成票。 Windows 7 的主要版本也等于 6。如果意图是 isVistaOrLater,那么代码应该说 >= 6。因此,无论您如何解释,它都是错误的。
  • @DavidHeffernan 这个答案是在 Windows7 发布前一年给出的。
【解决方案3】:

我找到的最简单的解决方案是这个:

import sys

def isWindowsVista():
    '''Return True iff current OS is Windows Vista.'''
    if sys.platform != "win32":
        return False
    import win32api
    VER_NT_WORKSTATION = 1
    version = win32api.GetVersionEx(1)
    if not version or len(version) < 9:
        return False
    return ((version[0] == 6) and 
            (version[1] == 0) and
            (version[8] == VER_NT_WORKSTATION))

【讨论】:

  • 和win32api中的所有函数一样,直接从马嘴里拿——msdn.microsoft.com/en-us/library/ms724833(VS.85).aspx返回的元组大致映射到OSVERSIONSINFOEX的字段
  • 这也是错误的。对于 Windows 7 以及可能在 Windows 7 之后出现的任何版本,它将返回 true。Vista 有 6.0 版,Windows 7 有 6.1 版。真正的人,做对并不难!
  • @David Heffernan:检查帖子的时间戳,这是在 Windows 7 出现之前的 WAY :) 但感谢您指出这一点。我更新了代码以检查次要版本号,我认为这次应该足够了。
  • 这完全取决于您是希望代码运行一次,还是一次又一次地运行。
【解决方案4】:

http://www.brunningonline.net/simon/blog/archives/winGuiAuto.py.html 的一个想法可能会有所帮助,它基本上可以回答您的问题:

win_version = {4: "NT", 5: "2K", 6: "XP"}[os.sys.getwindowsversion()[0]]
print "win_version=", win_version

【讨论】:

    【解决方案5】:
    import platform
    if platform.release() == "Vista":
        # Do something.
    

    import platform
    if "Vista" in platform.release():
        # Do something.
    

    【讨论】:

      猜你喜欢
      • 2019-02-02
      • 2012-08-16
      • 1970-01-01
      • 2012-01-03
      • 2012-08-29
      • 1970-01-01
      • 2021-08-02
      • 1970-01-01
      相关资源
      最近更新 更多