Was muss ich beachten, um festzustellen, ob ich unter Windows oder Unix usw. arbeite?
Warum sollte ich die platform
sur sys.platform
?
Was muss ich beachten, um festzustellen, ob ich unter Windows oder Unix usw. arbeite?
>>> 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
Darwin
Windows
Siehe: platform
- Zugang zu den Identifizierungsdaten der zugrunde liegenden Plattform
@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"
.
Gibt platform.system() unter Mac OS X immer "Darwin" zurück? oder ist auch ein anderer Fall möglich?
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'
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?
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?
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
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
platform.system()
.posix
o nt
dann verwenden Sie os.name
.sys.platform
.
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.
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/
Ein kleines Problem: win64
gibt es nicht: github.com/python/cpython/blob/master/Lib/platform.py . Alle Windows-Versionen sind win32
.
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.
4 Stimmen
Siehe ( bugs.python.org/issue12326 ) für Details!
7 Stimmen
Hier ist eine verwandte Frage: Name der Linux-Distribution prüfen .