9 Stimmen

Python: Windows-Betriebssystemversion und -Architektur ermitteln

Zunächst einmal glaube ich nicht, dass diese Frage ein Duplikat ist von
64bit-Betriebssystem (Windows) in Python erkennen
weil sie imho noch nicht gründlich beantwortet wurde.

Die einzige naheliegende Antwort ist:

Utilice sys.getwindowsversion() oder die Existenz von PROGRAMFILES(X86) ( if 'PROGRAMFILES(X86)' in os.environ )

Aber:

  • Ist die Windows-Umgebungsvariable PROGRAMFILES(X86) zuverlässig? Ich befürchte, dass jeder sie erstellen kann, auch wenn sie nicht auf dem System vorhanden ist.
  • Wie zu verwenden sys.getwindowsversion() um die Architektur zu erhalten?

Betreffend sys.getwindowsversion() :
Der Link http://docs.python.org/library/sys.html#sys.getwindowsversion
führt uns zu http://msdn.microsoft.com/en-us/library/ms724451%28VS.85%29.aspx
aber ich sehe nichts, was sich auf die Architektur (32bit/64bit) bezieht.
Außerdem scheint das Plattformelement im zurückgegebenen Tupel unabhängig von der Architektur zu sein.

Eine letzte Anmerkung: Ich suche nach einer Lösung, die sowohl Python 2.5 als auch eine Windows-Version ab Windows XP verwendet

Danke!

Editar:
Die entsprechenden Informationen finden Sie hier
http://msdn.microsoft.com/en-us/library/ms724340%28v=VS.85%29.aspx
aber wie kann ich dies mit Python bekommen?

Bearbeiten2: Auf einem 64bit Windows, mit einem 32bit Python-Interpreter:

  • os.environ["PROCESSOR_ARCHITECTURE"] gibt zurück
    • 'x86'
  • platform.architecture() gibt zurück
    • ('32bit', 'WindowsPE')

26voto

Curtis Price Punkte 401

Ich denke, das Plattformmodul ist wirklich der beste Weg, um diese Informationen zu erhalten.

  >>> import platform
  >>> platform.platform()
  'Windows-7-6.1.7601-SP1'
  platform.processor()
  'Intel64 Family 6 Model 42 Stepping 7, GenuineIntel'

Ich sehe nicht, woher ich eine eindeutige Antwort auf 32/64-Bit-Windows bekommen kann, also schlage ich Folgendes vor:

  try:
      os.environ["PROGRAMFILES(X86)"]
      bits = 64
  except:
      bits = 32
  print "Win{0}".format(bits)

oder wenn Sie wissen müssen, welche Variante von Python Sie verwenden (da Sie x32-Python unter x64-Windows ausführen können):

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)]'

6voto

Luke Punkte 148

Diese Variablen zeigen Ihren aktuellen Laufzeitstatus unter Windows an:

@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

2voto

ChristopheD Punkte 106139

1 Eine andere Möglichkeit (WMI für OsArchitecture abfragen):

Wenn Sie Folgendes installieren pywin32 und die python wmi Modul sollten Sie in der Lage sein zu tun (aber nur von Windows Vista und höher!):

import wmi
c = wmi.WMI()
for os in c.Win32_OperatingSystem():
    print os.osarchitecture

2 Alternativ können Sie auch die _winreg Modul um die Existenz von SOFTWARE\Wow6432Node unter HKEY_LOCAL_MACHINE (dies ist angeblich nur dort auf 64-Bit-Betriebssystemen) (keine externen Abhängigkeiten).

1voto

rishabhr0y Punkte 810

Ich hoffe, dass dies das Problem lösen kann Ich habe es auf meinem Windows 8.1 64 bit ausprobiert und es gibt den Wert AMD64 für mich

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

führen Sie einfach diesen Code aus wenn Sie mit einem 64-Bit-Windows-Rechner arbeiten, wird AMD64 gedruckt

oder wenn Sie mit 32 Bit arbeiten, wird AMD32 ausgegeben

Ich hoffe, dieser Code kann helfen, dieses Problem vollständig zu lösen

0voto

Hier ist ein netter Python-Befehl als Einzeiler.

>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

>

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X