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
>