Python:获取Windows操作系统版本和架构

9 投票
5 回答
38624 浏览
提问于 2025-04-15 22:20

首先,我觉得这个问题并不是重复的,因为我认为之前的回答并没有彻底解决这个问题。

唯一接近的回答是:

使用 sys.getwindowsversion() 或者检查是否存在 PROGRAMFILES(X86) (if 'PROGRAMFILES(X86)' in os.environ

但是:

  • Windows 的环境变量 PROGRAMFILES(X86) 可靠吗?我担心任何人都可以创建这个变量,即使系统上并不存在。
  • 如何使用 sys.getwindowsversion() 来获取系统架构?

关于 sys.getwindowsversion()
这个链接 http://docs.python.org/library/sys.html#sys.getwindowsversion
指向 http://msdn.microsoft.com/en-us/library/ms724451%28VS.85%29.aspx
但是我没有看到任何与架构(32位/64位)相关的信息。
而且,返回的元组中的平台元素似乎与架构无关。

最后一点:我希望找到一个可以在 Python 2.5 和从 Windows XP 开始的 Windows 版本上使用的解决方案。

谢谢!

编辑:
相关信息可以在这里找到
http://msdn.microsoft.com/en-us/library/ms724340%28v=VS.85%29.aspx
但是我该如何用 Python 获取这些信息呢?

编辑2:在一个 64 位的 Windows 系统上,使用 32 位的 Python 解释器:

  • os.environ["PROCESSOR_ARCHITECTURE"] 返回
    • 'x86'
  • platform.architecture() 返回
    • ('32bit', 'WindowsPE')

5 个回答

2

1 另一种选择(查询 WMI 获取操作系统架构):

如果你在电脑上安装了 pywin32python wmi 模块,那么你就可以这样做(不过只能在 Windows Vista 及更高版本上使用!):

import wmi
c = wmi.WMI()
for os in c.Win32_OperatingSystem():
    print os.osarchitecture

2 另外,你也可以使用 _winreg 模块 来检查在 HKEY_LOCAL_MACHINE 下是否存在 SOFTWARE\Wow6432Node(据说这个路径只在 64 位操作系统上存在)(不需要额外的依赖)。

26

我觉得使用平台模块是获取这些信息的最佳方法。

  >>> import platform
  >>> platform.platform()
  'Windows-7-6.1.7601-SP1'
  platform.processor()
  'Intel64 Family 6 Model 42 Stepping 7, GenuineIntel'

我在这里找不到关于32位或64位Windows的确切答案,所以我建议这样做:

  try:
      os.environ["PROGRAMFILES(X86)"]
      bits = 64
  except:
      bits = 32
  print "Win{0}".format(bits)

或者,如果你想知道你正在运行的Python版本(因为你可以在64位Windows上运行32位的Python):

x32 python x64 windows:
>>> platform.architecture()
('32bit', 'WindowsPE')
>>> sys.version
'2.7.2 (default, Jun 12 2011, 15:08:59) [MSC v.1500 32 bit (Intel)]'

x64 python x64 windows:
>>> platform.architecture()
('64bit', 'WindowsPE')
>>> sys.version
'2.7.2 (default, Jun 12 2011, 14:24:46) [MSC v.1500 64 bit (AMD64)]'
6

这些变量显示了你在Windows系统上当前的运行状态:


@rem Test environment using this table:
@rem
@rem Environment Variable       32bit Native    64bit Native    WOW64
@rem PROCESSOR_ARCHITECTURE     x86             AMD64           x86
@rem PROCESSOR_ARCHITEW6432     undefined       undefined       AMD64
@rem

撰写回答