Python:获取Windows操作系统版本和架构
首先,我觉得这个问题并不是重复的,因为我认为之前的回答并没有彻底解决这个问题。
唯一接近的回答是:
使用
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 个回答
1 另一种选择(查询 WMI 获取操作系统架构):
如果你在电脑上安装了 pywin32 和 python 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 位操作系统上存在)(不需要额外的依赖)。
我觉得使用平台模块是获取这些信息的最佳方法。
>>> 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)]'
这些变量显示了你在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