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

时间:2010-05-04 10:05:35

标签: python windows cpu-architecture

首先,我认为这个问题不是重复的 Detect 64bit OS (windows) in Python
因为imho没有得到彻底的回答。

唯一接近的答案是:

  

使用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
但我没有看到任何与架构相关的信息(32bit / 64bit) 此外,返回元组中的平台元素似乎独立于体系结构。

最后一点:我正在寻找一个使用python 2.5和从Windows XP开始的Windows版本的解决方案

谢谢!

编辑:
相关信息可在此处获取 http://msdn.microsoft.com/en-us/library/ms724340%28v=VS.85%29.aspx
但我怎么能用python来搞定呢?

EDIT2: 在64位窗口上,使用32位python解释器:

  • os.environ [“PROCESSOR_ARCHITECTURE”]返回
    • '86'
  • platform.architecture()返回
    • ('32bit','WindowsPE')

5 个答案:

答案 0 :(得分:14)

我认为平台模块确实是获取此信息的最佳方式。

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

我不知道从哪里可以得到32/64位窗口的确切答案,所以我建议:

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

或者,如果你需要知道你正在运行哪种Python(因为你可以在x64 Windows下运行x32 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)]'

答案 1 :(得分: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

答案 2 :(得分:2)

1另一个选项(为OsArchitecture轮询WMI):

如果您安装了pywin32python wmi模块,那么您应该可以(但仅限Windows Vista及以上版本!):

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

2另外,您也可以使用_winreg module来检查SOFTWARE\Wow6432NodeHKEY_LOCAL_MACHINE的存在(这可能是64位上的only there - 操作系统版本)(无外部依赖)。

答案 3 :(得分:1)

我希望这可以解决问题 我在Windows 8.1 64位上尝试了它并为我返回值 AMD64

import _winreg
def get_registry_value(key, subkey, value):

  key = getattr(_winreg, key)
  handle = _winreg.OpenKey(key, subkey )
  (value, type) = _winreg.QueryValueEx(handle, value)
  return value

windowsbit = get_registry_value(
    "HKEY_LOCAL_MACHINE",
    "SYSTEM\\CurrentControlSet\Control\\Session Manager\\Environment",
    "PROCESSOR_ARCHITECTURE")
print windowsbit

只需运行此代码 如果你正在使用64位Windows机器,这将打印AMD64

或者如果您正在使用32位,它将打印AMD32

我希望这段代码可以帮助完全解决这个问题

答案 4 :(得分:0)

这是一个很好的Python命令单行。

>python -c "import platform as p; print(p.platform());print(p.processor())"
Windows-10-10.0.17134-SP0
Intel64 Family 6 Model 61 Stepping 4, GenuineIntel

>