识别Windows版本

时间:2010-05-12 07:42:14

标签: python windows windowsversion

我正在编写一个打印出详细的Windows版本信息的函数,输出可能是这样的元组:

('32bit', 'XP', 'Professional', 'SP3', 'English')

它将支持Windows XP及更高版本。我一直坚持使用Windows版本,例如“专业”,“家庭基础”等等。

platform.win32_ver()或sys.getwindowsversion()不适合我。

win32api.GetVersionEx(1)几乎命中,但看起来它并没有告诉我足够的信息。

然后我看到GetProductInfo(),但看起来它没有在pywin32中实现。

任何提示?

3 个答案:

答案 0 :(得分:3)

您可以使用ctypes访问任何WinAPI功能。 GetProductInfo()位于windll.kernel32.GetProductInfo

我找到了Python versionMSDN "Getting the System Version" example(GPL许可,但你可以看到那里使用的功能)。

答案 1 :(得分:2)

如果ctypes不起作用(由于32比64比特?),这个hack应该:

def get_Windows_name():
    import subprocess, re
    o = subprocess.Popen('systeminfo', stdout=subprocess.PIPE).communicate()[0]
    try: o = str(o, "latin-1")  # Python 3+
    except: pass  
    return re.search("OS Name:\s*(.*)", o).group(1).strip()

print(get_Windows_name())

或者只是阅读注册表:

try: import winreg
except: import _winreg as winreg
with winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, r"SOFTWARE\Microsoft\Windows NT\CurrentVersion") as key:
    print(winreg.QueryValueEx(key, "EditionID")[0])

或者使用它:

from win32com.client import GetObject
wim = GetObject('winmgmts:')
print([o.Caption for o in wim.ExecQuery("Select * from Win32_OperatingSystem")][0])

答案 2 :(得分:2)

我尝试了上面的一些解决方案,但我一直在找一些给我“Windows XP”或“Windows 7”的东西。 platform中还有一些方法可以提供更多信息。

import platform
print platform.system(),platform.release()