В Python, как вы определяете, работает ли ядро ​​в 32-битном или 64-битном режиме?

Я запускаю python 2.6 на Linux, Mac OS и Windows и должен определить, работает ли ядро ​​в 32-разрядном или 64-битном режиме. Есть ли простой способ сделать это?

Я посмотрел на platform.machine(), но это не работает должным образом в Windows.

Я также посмотрел на platform.architecture(), и это не работает при запуске 32-разрядного питона в 64-разрядной Windows.

Примечание. Похоже, что python 2.7 имеет исправление, которое делает платформу .architecture() корректной. К сожалению, мне нужно использовать python 2.6 (по крайней мере пока).

(отредактируйте: от разговоров с людьми в автономном режиме это звучит так, будто, вероятно, не существует надежного метода, основанного на python, чтобы сделать это определение, не прибегая к злым хакам. Мне просто интересно, какие злые хаки люди использовали в их проекты, которые используют python 2.6. Например, в Windows может потребоваться посмотреть переменную среды PROCESSOR_ARCHITEW6432 и проверить на AMD64)

Ответ 1

Как насчет работы issue7860

import os
import sys
import platform

def machine():
    """Return type of machine."""
    if os.name == 'nt' and sys.version_info[:2] < (2,7):
        return os.environ.get("PROCESSOR_ARCHITEW6432", 
               os.environ.get('PROCESSOR_ARCHITECTURE', ''))
    else:
        return platform.machine()

def os_bits(machine=machine()):
    """Return bitness of operating system, or None if unknown."""
    machine2bits = {'AMD64': 64, 'x86_64': 64, 'i386': 32, 'x86': 32}
    return machine2bits.get(machine, None)

print (os_bits())

Ответ 2

>>> import platform
>>> platform.architecture()
('32bit', 'ELF')

Ответ 3

Python 2.7.2 (default, Jun 12 2011, 15:08:59) [MSC v.1500 32 bit (Intel)] on win
32
Type "help", "copyright", "credits" or "license" for more information.
>>> import platform
>>> platform.uname()[4]
'AMD64'

Это с 32-разрядным Python в 64-разрядной ОС Windows.

Ответ 4

мы можем использовать API для обнаружения тока в 32 бит или 64 бит

  

platform.architecture() [0]

  

'64bit

Ответ 5

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

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