В 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
Надеюсь, этот код поможет полностью решить эту проблему.