【问题标题】:Python: get windows OS version and architecturePython:获取 Windows 操作系统版本和架构
【发布时间】:2011-02-15 09:37:03
【问题描述】:

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

唯一接近的答案是:

使用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')

【问题讨论】:

  • 您到底想知道什么?架构大小还是存放程序的地方?
  • 正如问题标题所说:架构和版本的大小
  • Tjese 的答案是正确的,解决方案也是正确的,只要您在 64 位上运行 32 位程序,Windows 就会模拟这些数据。所以 winapi 会为你返回一个不正确的版本。
  • 我正在寻找独立于 python 解释器目标架构的正确答案。这是我正在寻找的操作系统架构。

标签: python windows cpu-architecture


【解决方案1】:

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

如果您在顶部安装 pywin32python wmi 模块,您应该能够做到(但仅限于 Windows Vista 及更高版本!):

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

2 或者,您也可以使用_winreg module 检查HKEY_LOCAL_MACHINE 下是否存在SOFTWARE\Wow6432Node(这在64 位操作系统版本上应该是only there)(没有外部依赖项)。

【讨论】:

  • 很遗憾,pywin32 不适用于 python 2.5 和 amd64 架构sourceforge.net/projects/pywin32/files
  • 好的,添加了另一个选项 (2) - 未经测试,因为我没有 64 位 Windows 操作系统。
  • 感谢 Christophe,这应该确实有效!但我更喜欢卢克的解决方案,因为我不必导入特定于 Windows 的模块
【解决方案2】:

这些变量显示您当前在 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

【讨论】:

  • 听起来不错!你知道用户是否可以改变这些环境变量(无意识的事件)?
【解决方案3】:

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

  >>> 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)]'

【讨论】:

  • platform.machine() 现在返回 32/64 位为 i386/AMD64platform.uname() 将在一次调用中返回操作系统版本和架构。
【解决方案4】:

我希望这可以解决问题 我在我的 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

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

【讨论】:

  • 这与获取环境变量相同。唯一的区别是它不受 SET 命令的影响。
【解决方案5】:

这是一个不错的 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

>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-27
    • 2019-01-19
    • 2016-10-08
    • 2018-05-14
    • 1970-01-01
    • 2016-03-03
    • 1970-01-01
    相关资源
    最近更新 更多