Обнаружение 64-битной ОС (Windows) в Python - PullRequest
35 голосов
/ 05 февраля 2010

Кто-нибудь знает, как бы я обнаружил, какая битовая версия Windows под Python. Мне нужно знать это как способ использования правильной папки для Program Files.

Большое спасибо

Ответы [ 19 ]

1 голос
/ 25 июля 2014

После этой документации , попробуйте этот код:

is_64bits = sys.maxsize > 2**32
1 голос
/ 13 августа 2017
import platform

platform.architecture()[0]

Возвращает «32 бита» или «64 бита» в зависимости от архитектуры системы.

1 голос
/ 04 июня 2015

Просто чтобы обновить этот старый поток - похоже, что модуль платформы теперь сообщает правильную архитектуру (по крайней мере, в Python 2.7.8):

c:\python27\python.exe -c "import platform; print platform.architecture(), platform.python_version()"
('32bit', 'WindowsPE') 2.7.6

c:\home\python278-x64\python.exe -c "import platform; print platform.architecture(), platform.python_version()"
('64bit', 'WindowsPE') 2.7.8

(извините, у меня нет представителя, чтобы комментировать первый ответ, который все еще утверждает, что был неправ:)

1 голос
/ 15 декабря 2014

Когда вам нужно узнать что-то о системе Windows, она обычно находится где-то в реестре, в соответствии с документацией MS, вы должны посмотреть (http://support.microsoft.com/kb/556009) это значение ключа:

HKLM \ HARDWARE \ Описание \ System \ CentralProcessor \ 0

и если это так:

0x00000020 (32 в десятичном виде)

Это 32-битная машина.

0 голосов
/ 23 мая 2014
 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=cputype = get_registry_value(
        "HKEY_LOCAL_MACHINE",
        "SYSTEM\\CurrentControlSet\Control\\Session Manager\\Environment",
        "PROCESSOR_ARCHITECTURE")
 print windowsbit

просто запустите этот код

, если вы работаете на машине с 64-битным Windows, будет напечатано:

или, если вы работаете с 32-битной версией, будет напечатано:

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

0 голосов
/ 29 января 2011

64-разрядные версии Windows используют так называемые ключи перенаправления реестра и отражения. Существует слой совместимости под названием WoW64, который обеспечивает совместимость 32-битных приложений. Начиная с Windows 7 и Windows Server 2008 R2 разделы реестра WoW64 больше не отражаются, а совместно используются. Вы можете прочитать об этом здесь:

отражение в реестре: msdn.microsoft.com/en-us/library/aa384235(v=vs.85).aspx

уязвимых ключей: msdn.microsoft.com/en-us/library/aa384253(v=vs.85).aspx

Википедия: en.wikipedia.org/wiki/WoW64

Все, что вам нужно сделать, это обнаружить наличие этих ключей. Вы можете использовать _winreg для этого. Используйте try: и попробуйте открыть ключ, пример:

try:
aReg = _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE,"SOFTWARE\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Run")
0 голосов
/ 05 февраля 2010

Должен быть каталог под Windows 64bit, папка с именем \Windows\WinSxS64 для 64 бит, под Windows 32bit это WinSxS.

0 голосов
/ 07 июня 2016
import struct

def is64Windows():
    return struct.calcsize('P') * 8 == 64
0 голосов
/ 30 октября 2014

Это работает для меня в тех версиях Python, которые я использую: 2.7 и 2.5.4

    import win32com.client
    import _winreg

    shell = win32com.client.Dispatch('WScript.Shell')
    proc_arch = shell.ExpandEnvironmentStrings(r'%PROCESSOR_ARCHITECTURE%').lower()

    if proc_arch == 'x86':
        print "32 bit"
    elif proc_arch == 'amd64':
        print "64 bit"
    else:
        raise Exception("Unhandled arch: %s" % proc_arch)
...