940 Stimmen

Python: Auf welchem Betriebssystem laufe ich?

Was muss ich beachten, um festzustellen, ob ich unter Windows oder Unix usw. arbeite?

4 Stimmen

Siehe ( bugs.python.org/issue12326 ) für Details!

7 Stimmen

Hier ist eine verwandte Frage: Name der Linux-Distribution prüfen .

1246voto

Louis Brandy Punkte 17498
>>> import os
>>> os.name
'posix'
>>> import platform
>>> platform.system()
'Linux'
>>> platform.release()
'2.6.22-15-generic'

Die Ausgabe von platform.system() ist wie folgt:

  • Linux: Linux
  • Mac: Darwin
  • Fenster: Windows

Siehe: platform - Zugang zu den Identifizierungsdaten der zugrunde liegenden Plattform

61 Stimmen

Warum sollte ich die platform sur sys.platform ?

86 Stimmen

@matth Etwas konsistentere Ausgabe, d.h. platform.system() 収益 "Windows" 代わりに "win32" . sys.platform enthält auch "linux2" auf alten Versionen von Python, während es nur "linux" bei neueren. platform.system() hat immer nur "Linux" .

11 Stimmen

Gibt platform.system() unter Mac OS X immer "Darwin" zurück? oder ist auch ein anderer Fall möglich?

218voto

Joey deVilla Punkte 8233

Verdammt - Louis Brandy ist mir zuvorgekommen. aber das bedeutet nicht, dass ich Ihnen nicht die Systemergebnisse für Vista zur Verfügung stellen kann!

>>> import os
>>> os.name
'nt'
>>> import platform
>>> platform.system()
'Windows'
>>> platform.release()
'Vista'

...und ich kann nicht glauben, dass noch niemand einen für Windows 10 gepostet hat:

>>> import os
>>> os.name
'nt'
>>> import platform
>>> platform.system()
'Windows'
>>> platform.release()
'10'

9 Stimmen

Windows 7: platform.release() '7'

5 Stimmen

Also, ja, ich habe gerade platform.release() in meiner Windows 10 und es hat mir definitiv nur '8' . Vielleicht habe ich Python vor dem Upgrade installiert, aber wirklich?

4 Stimmen

Ich hätte gedacht, dass es wahrscheinlicher ist, dass Sie von Windows 8 aktualisiert haben (im Gegensatz zu einer sauberen Installation) und was auch immer Python in der Registrierung oder was auch immer zurückgelassen wurde?

148voto

Mark Harrison Punkte 281807

Fürs Protokoll hier die Ergebnisse auf dem Mac:

>>> import os
>>> os.name
'posix'
>>> import platform
>>> platform.system()
'Darwin'
>>> platform.release()
'8.11.1'

4 Stimmen

Unter macOS Catalina 10.15.2, platform.release() 収益 '19.2.0'

2 Stimmen

19.2.0 ist die Release-Version von Darwin, die mit Catalina 10.15.2 ausgeliefert wird: de.wikipedia.org/wiki/MacOS_Catalina#Freigabe_Geschichte

125voto

Shital Shah Punkte 54846

Kurzgeschichte

Verwenden Sie platform.system() . Sie gibt zurück Windows , Linux o Darwin (für OSX).

Lange Geschichte

Es gibt 3 Möglichkeiten, OS in Python zu bekommen, jede mit ihren eigenen Vor- und Nachteilen:

Methode 1

>>> import sys
>>> sys.platform
'win32'  # could be 'linux', 'linux2, 'darwin', 'freebsd8' etc

Wie das funktioniert ( Quelle ): Intern ruft es OS-APIs auf, um den Namen des Betriebssystems, wie von OS definiert, zu erhalten. Siehe aquí für verschiedene betriebssystemspezifische Werte.

Pro: Keine Magie, niedriges Niveau.

Nachteil: Abhängig von der Betriebssystemversion, daher am besten nicht direkt verwenden.

Methode 2

>>> import os
>>> os.name
'nt'  # for Linux and Mac it prints 'posix'

Wie das funktioniert ( Quelle ): Intern prüft es, ob Python OS-spezifische Module namens posix oder nt hat.

Pro: Einfach zu prüfen, ob Posix OS

Nachteil: keine Unterscheidung zwischen Linux und OSX.

Methode 3

>>> import platform
>>> platform.system()
'Windows' # for Linux it prints 'Linux', Mac it prints `'Darwin'

Wie das funktioniert ( Quelle ): Intern wird es eventuell interne OS-APIs aufrufen, OS-versionsspezifische Namen wie "win32" oder "win16" oder "linux1" erhalten und dann durch Anwendung mehrerer Heuristiken zu allgemeineren Namen wie "Windows" oder "Linux" oder "Darwin" normalisieren.

Pro: Bester portabler Weg für Windows, OSX und Linux.

Nachteil: Python-Anwender müssen die Normalisierungsheuristik auf dem neuesten Stand halten.

Zusammenfassung

  • Wenn Sie prüfen wollen, ob es sich bei dem Betriebssystem um Windows, Linux oder OSX handelt, ist die zuverlässigste Methode platform.system() .
  • Wenn Sie betriebssystemspezifische Aufrufe machen wollen, aber über eingebaute Python-Module posix o nt dann verwenden Sie os.name .
  • Wenn Sie den rohen OS-Namen, wie er vom OS selbst geliefert wird, erhalten möchten, verwenden Sie sys.platform .

8 Stimmen

So viel zum Thema "Es sollte nur einen (und vorzugsweise nur einen) Weg geben, Dinge zu tun". Ich glaube jedoch, dass dies die richtige Antwort ist. Sie müssten mit den Namen der Betriebssysteme vergleichen, aber das ist kein Problem und wird eher portabel sein.

1 Stimmen

Beachten Sie, dass in Python 3.10 , platform.system wird standardmäßig auf sys.platform wenn die os.uname eine Ausnahme auslöst: github.com/python/cpython/blob/

119voto

user3928804 Punkte 1123

Beispielcode zur Unterscheidung von Betriebssystemen mit Python:

import sys

if sys.platform.startswith("linux"):  # could be "linux", "linux2", "linux3", ...
    # linux
elif sys.platform == "darwin":
    # MAC OS X
elif sys.platform == "win32":
    # Windows (either 32-bit or 64-bit)

10 Stimmen

Für unschärfere Ergebnisse, ``_platform.startswith('linux')

4 Stimmen

sys.platform == 'cygwin' unter Windows Cygwin-Shell

8 Stimmen

Ein kleines Problem: win64 gibt es nicht: github.com/python/cpython/blob/master/Lib/platform.py . Alle Windows-Versionen sind win32 .

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