Wie kann ich feststellen, auf welchem ​​​​Betriebssystem Python ausgeführt wird?

Lesezeit: 7 Minuten

Benutzer-Avatar
Markus Harrison

Worauf muss ich achten, um festzustellen, ob ich Windows oder Unix usw. verwende?

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

    – Arnkore

    18. Januar 2012 um 9:34 Uhr

  • Hier ist eine verwandte Frage: Überprüfen Sie den Namen der Linux-Distribution.

    – hell

    8. Dezember 2015 um 19:00 Uhr

Benutzer-Avatar
Louis Brandy

>>> 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

Sehen: platform — Zugriff auf die Identifizierungsdaten der zugrunde liegenden Plattform

  • Warum sollte ich bevorzugen platform Über sys.platform?

    – math

    7. November 2016 um 14:25 Uhr

  • @matth Etwas konsistentere Ausgabe. dh platform.system() kehrt zurück "Windows" Anstatt von "win32". sys.platform enthält auch "linux2" auf alten Versionen von Python, während es nur enthält "linux" auf neueren. platform.system() ist immer nur zurückgekehrt "Linux".

    – erb

    9. Juni 2017 um 10:22 Uhr


  • Unter Mac OS X gibt platform.system() immer “Darwin” zurück? oder ist ein anderer Fall möglich?

    – baptiste chéné

    12. Januar 2018 um 13:35 Uhr

  • @baptistechéné, ich weiß, dass dies über ein Jahr her ist, seit Sie gefragt haben, aber als Kommentar schadet es nicht, ich werde es trotzdem posten 🙂 Der Grund dafür ist also, dass es den Kernelnamen anzeigt. Auf die gleiche Weise haben Linux (der Kernel)-Distributionen viele Namen (u. a. Ubuntu, Arch, Fedora), aber es wird sich als Kernelname Linux präsentieren. Darwin (ein BSD-basierter Kernel) hat sein umgebendes System, das macOS. Ich bin mir ziemlich sicher, dass Apple Darwin als Open-Source-Code veröffentlicht hat, aber es gibt keine andere mir bekannte Distribution, die über Darwin läuft.

    – Joao Paulo Rabelo

    30. Januar 2019 um 12:05 Uhr

  • @TooroSan os.uname() existiert nur für Unix-Systeme. Die Python 3-Dokumentation: docs.python.org/3/library/os.html Availability: recent flavors of Unix.

    – Irving Moy

    22. März 2020 um 21:49 Uhr


Benutzer-Avatar
Joey deVilla

Verdammt — Louis Brandy ist mir zuvorgekommen, aber das heißt nicht, dass ich Ihnen die Systemergebnisse für Vista nicht liefern kann!

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

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

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

  • Windows 7: platform.release() '7'

    – Hugo

    20. April 2015 um 12:27 Uhr

  • Also, ja, ich bin einfach gerannt platform.release() auf meinem Fenster 10und es hat mir definitiv gerade gegeben '8'. Vielleicht habe ich Python vor dem Upgrade installiert, aber wirklich?

    – Codeschmied

    8. Juni 2017 um 13:35 Uhr

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

    – ABl. Ford

    30. Januar 2018 um 20:53 Uhr

  • Die Release-Suche für Python unter Windows scheint im Kern die Win32-API-Funktion GetVersionEx zu verwenden. Die Hinweise oben in diesem Microsoft-Artikel zu dieser Funktion könnten relevant sein: msdn.microsoft.com/en-us/library/windows/desktop/…

    – der Ferrit32

    22. März 2018 um 20:13 Uhr


Benutzer-Avatar
Markus Harrison

Fürs Protokoll hier die Ergebnisse auf dem Mac:

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

  • Unter macOS Catalina 10.15.2, platform.release() kehrt zurück '19.2.0'

    – Boris Werchowskij

    27. Dezember 2019 um 4:55 Uhr


  • 19.2.0 ist die Release-Version von Darwin, die mit Catalina 10.15.2 geliefert wird: en.wikipedia.org/wiki/MacOS_Catalina#Release_history

    – Philshem

    21. August 2020 um 13:28 Uhr

Benutzer-Avatar
Benutzer3928804

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)

Benutzer-Avatar
Schital Schah

Kurzgeschichte

Verwenden platform.system(). Es kehrt zurück Windows, Linux oder Darwin (für OS X).

Lange Geschichte

Es gibt 3 Möglichkeiten, ein Betriebssystem in Python zu erhalten, 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 Betriebssystem-APIs auf, um den Namen des Betriebssystems zu erhalten, wie durch das Betriebssystem definiert. Siehe hier für verschiedene betriebssystemspezifische Werte.

Pro: Keine Magie, niedriges Level.

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

Methode 2

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

Wie das funktioniert (Quelle): Intern wird geprüft, ob Python betriebssystemspezifische Module namens posix oder nt hat.

Pro: Einfach zu überprüfen, ob posix OS

Con: keine Unterscheidung zwischen Linux oder OSX.

Methode 3

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

Wie das funktioniert (Quelle): Intern ruft es schließlich interne Betriebssystem-APIs auf, erhält einen für die Betriebssystemversion spezifischen Namen wie „win32“ oder „win16“ oder „linux1“ und normalisiert sich dann durch Anwendung auf allgemeinere Namen wie „Windows“ oder „Linux“ oder „Darwin“. mehrere Heuristiken.

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

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

Zusammenfassung

  • Wenn Sie überprüfen möchten, ob das Betriebssystem Windows oder Linux oder OSX ist, ist dies der zuverlässigste Weg platform.system().
  • Wenn Sie betriebssystemspezifische Aufrufe durchführen möchten, jedoch über integrierte Python-Module posix oder nt dann benutze os.name.
  • Wenn Sie den rohen Betriebssystemnamen erhalten möchten, wie er vom Betriebssystem selbst bereitgestellt wird, verwenden Sie sys.platform.

  • So viel zu „Es sollte einen (und am besten nur einen) Weg geben, Dinge zu tun“. Ich glaube jedoch, dass dies die richtige Antwort ist. Sie müssten mit betitelten Betriebssystemnamen vergleichen, aber das ist kein solches Problem und wird portabler sein.

    – Vincent-lg

    13. April 2020 um 10:00 Uhr

Benutzer-Avatar
Georgi

Sie können auch verwenden sys.platform wenn Sie bereits importiert haben sys und Sie möchten kein weiteres Modul importieren

>>> import sys
>>> sys.platform
'linux2'

  • So viel zu „Es sollte einen (und am besten nur einen) Weg geben, Dinge zu tun“. Ich glaube jedoch, dass dies die richtige Antwort ist. Sie müssten mit betitelten Betriebssystemnamen vergleichen, aber das ist kein solches Problem und wird portabler sein.

    – Vincent-lg

    13. April 2020 um 10:00 Uhr

Ich habe mit einer etwas systematischeren Auflistung begonnen, welche Werte Sie mit den verschiedenen Modulen erwarten können (Sie können Ihr System gerne bearbeiten und hinzufügen):

Linux (64 Bit) + WSL

                            x86_64            aarch64
                            ------            -------
os.name                     posix             posix
sys.platform                linux             linux
platform.system()           Linux             Linux
sysconfig.get_platform()    linux-x86_64      linux-aarch64
platform.machine()          x86_64            aarch64
platform.architecture()     ('64bit', '')     ('64bit', 'ELF')
  • versuchte es mit Archlinux und Mint, bekam die gleichen Ergebnisse
  • auf python2 sys.platform wird von der Kernel-Version angehängt, z linux2alles andere bleibt gleich
  • gleiche Ausgabe auf dem Windows-Subsystem für Linux (versucht mit Ubuntu 18.04 LTS), außer platform.architecture() = ('64bit', 'ELF')

WINDOWS (64bit)

(mit 32-Bit-Spalte, die im 32-Bit-Subsystem ausgeführt wird)

official python installer   64bit                     32bit
-------------------------   -----                     -----
os.name                     nt                        nt
sys.platform                win32                     win32
platform.system()           Windows                   Windows
sysconfig.get_platform()    win-amd64                 win32
platform.machine()          AMD64                     AMD64
platform.architecture()     ('64bit', 'WindowsPE')    ('64bit', 'WindowsPE')

msys2                       64bit                     32bit
-----                       -----                     -----
os.name                     posix                     posix
sys.platform                msys                      msys
platform.system()           MSYS_NT-10.0              MSYS_NT-10.0-WOW
sysconfig.get_platform()    msys-2.11.2-x86_64        msys-2.11.2-i686
platform.machine()          x86_64                    i686
platform.architecture()     ('64bit', 'WindowsPE')    ('32bit', 'WindowsPE')

msys2                       mingw-w64-x86_64-python3  mingw-w64-i686-python3
-----                       ------------------------  ----------------------
os.name                     nt                        nt
sys.platform                win32                     win32
platform.system()           Windows                   Windows
sysconfig.get_platform()    mingw                     mingw
platform.machine()          AMD64                     AMD64
platform.architecture()     ('64bit', 'WindowsPE')    ('32bit', 'WindowsPE')

cygwin                      64bit                     32bit
------                      -----                     -----
os.name                     posix                     posix
sys.platform                cygwin                    cygwin
platform.system()           CYGWIN_NT-10.0            CYGWIN_NT-10.0-WOW
sysconfig.get_platform()    cygwin-3.0.1-x86_64       cygwin-3.0.1-i686
platform.machine()          x86_64                    i686
platform.architecture()     ('64bit', 'WindowsPE')    ('32bit', 'WindowsPE')

Einige Anmerkungen:

  • Es gibt auch distutils.util.get_platform() was identisch ist mit `sysconfig.get_platform
  • Anaconda unter Windows ist dasselbe wie das offizielle Python-Windows-Installationsprogramm
  • Ich habe weder einen Mac noch ein echtes 32-Bit-System und war nicht motiviert, dies online zu tun

Um es mit Ihrem System zu vergleichen, führen Sie einfach dieses Skript aus (und fügen Sie die Ergebnisse hier an, falls sie fehlen 🙂

from __future__ import print_function
import os
import sys
import platform
import sysconfig

print("os.name                      ",  os.name)
print("sys.platform                 ",  sys.platform)
print("platform.system()            ",  platform.system())
print("sysconfig.get_platform()     ",  sysconfig.get_platform())
print("platform.machine()           ",  platform.machine())
print("platform.architecture()      ",  platform.architecture())

  • Auf dem neuesten MSYS2 berichtet MinGW64 sys.platform wie win32 wie Ihr Bericht, aber MSYS2- und UCRT64-Bericht cygwin aber nicht msys.

    – Paebbels

    8. Januar um 18:52 Uhr

1140920cookie-checkWie kann ich feststellen, auf welchem ​​​​Betriebssystem Python ausgeführt wird?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy