Python: получить версию ОС Windows и архитектуру - PullRequest
6 голосов
/ 04 мая 2010

Прежде всего, я не думаю, что этот вопрос является дубликатом
Обнаружение 64-битной ОС (windows) в Python
потому что имхо это не было полностью дано.

Единственный подходящий ответ:

Используйте sys.getwindowsversion() или наличие ПРОГРАММНЫХ ФАЙЛОВ (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, начиная с Windows XP

Спасибо!

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

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

  • os.environ ["PROCESSOR_ARCHITECTURE"] возвращает
    • x86 '
  • platform.architecture () возвращает
    • («32-битная», «WindowsPE»)

Ответы [ 5 ]

15 голосов
/ 21 мая 2013

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

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

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 голосов
/ 05 мая 2010

Эти переменные показывают ваше текущее состояние выполнения в Windows

<code>
@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 голосов
/ 04 мая 2010

1 Другой вариант (опросите WMI для OsArchitecture):

Если вы установите pywin32 и модуль python 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-битных версиях ОС) (без внешних зависимостей).

1 голос
/ 23 мая 2014

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

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

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

>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...