Python: get windows OS version and architecture
First of all, I don't think this question is a duplicate of
Detect 64bit OS (windows) in Python because imho it has not been thoroughly answered.The only approaching answer is:
Use
sys.getwindowsversion()
or the existence of PROGRAMFILES(X86) (if 'PROGRAMFILES(X86)' in os.environ
)
But:
- Does the windows environment variable
PROGRAMFILES(X86)
reliable? I fear that anyone can create it, even if it's not present on the system. - How to use
sys.getwindowsversion()
in order to get the architecture?
Regarding sys.getwindowsversion()
:
One last note: I'm looking for a solution using both python 2.5 and a windows version starting at Windows XP
Thanks!
Edit:
The relevant info is available here http://msdn.microsoft.com/en-us/library/ms724340%28v=VS.85%29.aspx but how can I get this with python?Edit2: On a 64bit windows, with a 32bit python interpreter:
- os.environ["PROCESSOR_ARCHITECTURE"] returns
- 'x86'
- platform.architecture() returns
- ('32bit', 'WindowsPE')
I think the platform module is really the best way to get this info.
>>> import platform
>>> platform.platform()
'Windows-7-6.1.7601-SP1'
platform.processor()
'Intel64 Family 6 Model 42 Stepping 7, GenuineIntel'
I don't see where to get a firm answer on 32/64 bit windows from here, so I suggest this:
try:
os.environ["PROGRAMFILES(X86)"]
bits = 64
except:
bits = 32
print "Win{0}".format(bits)
or, if you need to know which flavor of Python you are running (as you can run x32 python under 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)]'
These variables show your current runtime status on 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
1 Another option (poll WMI for OsArchitecture):
If you install pywin32 and the python wmi module on top you should be able to do (but only from Windows Vista and up!):
import wmi
c = wmi.WMI()
for os in c.Win32_OperatingSystem():
print os.osarchitecture
2 Alternatively you could also use the _winreg
module to check for the existence of SOFTWARE\Wow6432Node
under HKEY_LOCAL_MACHINE
(this is supposedly only there on 64 bit- OS versions) (no external dependencies).
i hope this can solve the problem i tried it on my windows 8.1 64 bit and returns the value AMD64 for me
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
just run this code if you are working on 64 bit windows machine this will print AMD64
or if you are working on 32 bit it will print AMD32
i hope this code can help to solve this problem fully
Here's a nice Python command 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
>
精彩评论