Python: получить версию и архитектуру ОС windows

во-первых, я не думаю, что этот вопрос является дубликатом
обнаружение 64-битной ОС (windows) в 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
но я не вижу ничего, связанного с архитектурой (32bit / 64bit).
Более того, элемент платформы в возвращаемом кортеже, похоже, независимо от архитектуры.

последнее примечание: Я ищу решение, используя как python 2.5, так и версию windows, начиная с Windows XP

спасибо!

Edit:
Соответствующая информация доступна here
http://msdn.microsoft.com/en-us/library/ms724340%28v=VS.85%29.aspx
но как я могу получить это с python?

Edit2: На 64-битных окнах с 32-битным интерпретатором python:

  • os.environ ["PROCESSOR_ARCHITECTURE"] возвратит
    • 'х86'
  • .архитектура() возвращает
    • ('32bit','WindowsPE')

5 ответов


эти переменные показывают текущее состояние выполнения в 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

Я думаю, что модуль платформа действительно лучший способ получить эту информацию.

  >>> 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 вы используете (как вы можете запустить x32 python под x64 Windows):

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 Еще один вариант (опрос WMI для OsArchitecture):

при установке pywin32 и питон с WMI модуль сверху вы должны быть в состоянии сделать (но только из Windows Vista и выше!):

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

2 в качестве альтернативы вы также можете использовать _winreg модуль чтобы проверить наличие SOFTWARE\Wow6432Node под HKEY_LOCAL_MACHINE (это типо только здесь на 64 - разрядных версиях ОС) (без внешних зависимостей).


Я надеюсь, что это может решить проблему я попробовал его на моем Windows 8.1 64 bit и возвращает значение для 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

Я надеюсь, что этот код может помочь полностью решить эту проблему


вот хорошая команда Python one-liner.

>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

>