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 .

60voto

coldfix Punkte 5600

Ich habe eine etwas systematischere Auflistung der Werte begonnen, die Sie bei der Verwendung der verschiedenen Module erwarten können (Sie können gerne Ihr System bearbeiten und hinzufügen):

Linux (64bit) + 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')
  • mit Archlinux und Mint ausprobiert, dieselben Ergebnisse erhalten
  • auf python2 sys.platform wird durch die Kernelversion ergänzt, z. B. linux2 , alles andere bleibt gleich
  • gleiche Ausgabe auf Windows Subsystem für Linux (versucht mit ubuntu 18.04 LTS), außer platform.architecture() = ('64bit', 'ELF')

Windows (64bit)

(mit 32bit-Spalte, die im 32bit-Subsystem läuft)

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

  • Außerdem gibt es distutils.util.get_platform() was identisch ist mit `sysconfig.get_platform
  • anaconda auf Windows ist dasselbe wie das offizielle Python-Installationsprogramm für Windows
  • Ich habe weder einen Mac noch ein echtes 32-Bit-System und war nicht motiviert, dies online zu tun.

Um mit Ihrem System zu vergleichen, führen Sie einfach dieses Skript aus (und fügen Sie bitte die Ergebnisse hier ein, 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())

0 Stimmen

Auf dem neuesten MSYS2 meldet MinGW64 sys.platform als win32 wie von Ihnen gemeldet, aber MSYS2 und UCRT64 melden cygwin aber nicht msys .

45voto

Moe Punkte 26523

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

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

0 Stimmen

Hat einer der Ansätze irgendwelche Vorteile, abgesehen davon, dass man ein anderes Modul importieren muss oder nicht?

0 Stimmen

Das Scoping ist der Hauptvorteil. Sie wollen so wenige globale Variablennamen wie möglich. Wenn Sie bereits "sys" als globalen Namen haben, sollten Sie keinen weiteren hinzufügen. Wenn Sie aber "sys" noch nicht verwenden, könnte "_platform" anschaulicher sein und weniger wahrscheinlich mit einer anderen Bedeutung kollidieren.

43voto

Jens Timmerman Punkte 8367

Wenn Sie benutzerlesbare, aber dennoch detaillierte Daten wünschen, können Sie plattform.plattform()

>>> import platform
>>> platform.platform()
'Linux-3.3.0-8.fc16.x86_64-x86_64-with-fedora-16-Verne'

Hier sind ein paar verschiedene mögliche Aufrufe, die Sie machen können, um herauszufinden, wo Sie sich befinden. linux_distribution und dist sind in neueren Python-Versionen entfernt worden.

import platform
import sys

def linux_distribution():
  try:
    return platform.linux_distribution()
  except:
    return "N/A"

def dist():
  try:
    return platform.dist()
  except:
    return "N/A"

print("""Python version: %s
dist: %s
linux_distribution: %s
system: %s
machine: %s
platform: %s
uname: %s
version: %s
mac_ver: %s
""" % (
sys.version.split('\n'),
str(dist()),
linux_distribution(),
platform.system(),
platform.machine(),
platform.platform(),
platform.uname(),
platform.version(),
platform.mac_ver(),
))

Die Ergebnisse dieses Skripts, das auf verschiedenen Systemen (Linux, Windows, Solaris, MacOS) und Architekturen (x86, x64, Itanium, Power PC, Sparc) ausgeführt wurde, sind hier verfügbar: https://github.com/hpcugent/easybuild/wiki/OS_flavor_name_version

Ubuntu 12.04 Server gibt zum Beispiel:

Python version: ['2.6.5 (r265:79063, Oct  1 2012, 22:04:36) ', '[GCC 4.4.3]']
dist: ('Ubuntu', '10.04', 'lucid')
linux_distribution: ('Ubuntu', '10.04', 'lucid')
system: Linux
machine: x86_64
platform: Linux-2.6.32-32-server-x86_64-with-Ubuntu-10.04-lucid
uname: ('Linux', 'xxx', '2.6.32-32-server', '#62-Ubuntu SMP Wed Apr 20 22:07:43 UTC 2011', 'x86_64', '')
version: #62-Ubuntu SMP Wed Apr 20 22:07:43 UTC 2011
mac_ver: ('', ('', '', ''), '')

2 Stimmen

DeprecationWarning: dist() and linux_distribution() functions are deprecated in Python 3.5

19voto

whackamadoodle3000 Punkte 6457

Wie wäre es mit einer neuen Antwort:

import psutil
psutil.MACOS   #True (OSX is deprecated)
psutil.WINDOWS #False
psutil.LINUX   #False 

So würde die Ausgabe aussehen, wenn ich MACOS verwenden würde

12 Stimmen

Psutil ist nicht Teil der Standardlib

16voto

Verwenden Sie plattform.system()

Gibt den System-/OS-Namen zurück, z. B. 'Linux', 'Darwin', 'Java', 'Windows'. Ein leerer String wird zurückgegeben, wenn der Wert nicht ermittelt werden kann.

import platform
system = platform.system().lower()

is_windows = system == 'windows'
is_linux = system == 'linux'
is_mac = system == 'darwin'

0 Stimmen

Wie kann ich den Namen meiner Distribution erfahren? Wenn ich zum Beispiel Arch verwende, wie kann ich dann Arch ?

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