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 .

7voto

robmsmt Punkte 1182

Ich weiß, dass dies eine alte Frage ist, aber ich glaube, dass meine Antwort für einige Leute hilfreich sein könnte, die nach einem einfachen, leicht verständlichen pythonischen Weg suchen, um OS in ihrem Code zu erkennen. Getestet mit python3.7

from sys import platform

class UnsupportedPlatform(Exception):
    pass

if "linux" in platform:
    print("linux")
elif "darwin" in platform:
    print("mac")
elif "win" in platform:
    print("windows")
else:
    raise UnsupportedPlatform

6 Stimmen

Wenn dieser Code jemals von jemandem überarbeitet wird, der die Struktur des if nicht versteht, könnte dies zu einer falschen Erkennung von macos führen, weil win ist enthalten in darwin . A startswidth wäre weniger problematisch.

0 Stimmen

Wenn Sie Code refaktorisieren und die If-Anweisungen nicht beherrschen, haben Sie wahrscheinlich größere Fische zu fangen.

0 Stimmen

Wenn möglich, sollte die Änderung eines if-Zweigs nicht zu einem falsch positiven Ergebnis führen. Dieses Konzept wird als sauberer Code bezeichnet.

6voto

sunil Punkte 3427

Wenn Sie nicht nach der Kernel-Version usw., sondern nach der Linux-Distribution suchen, können Sie folgendes verwenden

in python2.6+

>>> import platform
>>> print platform.linux_distribution()
('CentOS Linux', '6.0', 'Final')
>>> print platform.linux_distribution()[0]
CentOS Linux
>>> print platform.linux_distribution()[1]
6.0

in python2.4

>>> import platform
>>> print platform.dist()
('centos', '6.0', 'Final')
>>> print platform.dist()[0]
centos
>>> print platform.dist()[1]
6.0

Dies funktioniert natürlich nur, wenn Sie das Programm unter Linux ausführen. Wenn Sie ein allgemeineres Skript für verschiedene Plattformen haben möchten, können Sie es mit Codebeispielen aus anderen Antworten mischen.

6voto

Versuchen Sie dies:

import os

os.uname()

und Sie können es schaffen:

info=os.uname()
info[0]
info[1]

4 Stimmen

Auch os.uname() ist unter Windows nicht verfügbar: docs.python.org/2/Bibliothek/os.html#os.uname Verfügbarkeit: aktuelle Unix-Varianten.

5voto

G M Punkte 17276

Sie können auch nur das Plattformmodul verwenden, ohne das os-Modul zu importieren, um alle Informationen zu erhalten.

>>> import platform
>>> platform.os.name
'posix'
>>> platform.uname()
('Darwin', 'mainframe.local', '15.3.0', 'Darwin Kernel Version 15.3.0: Thu Dec 10 18:40:58 PST 2015; root:xnu-3248.30.4~1/RELEASE_X86_64', 'x86_64', 'i386')

Mit dieser Zeile lässt sich ein schönes und übersichtliches Layout für die Berichterstattung erstellen:

for i in zip(['system','node','release','version','machine','processor'],platform.uname()):print i[0],':',i[1]

Das ergibt diese Ausgabe:

system : Darwin
node : mainframe.local
release : 15.3.0
version : Darwin Kernel Version 15.3.0: Thu Dec 10 18:40:58 PST 2015; root:xnu-3248.30.4~1/RELEASE_X86_64
machine : x86_64
processor : i386

Was in der Regel fehlt, ist die Version des Betriebssystems, aber Sie sollten wissen, ob Sie mit Windows, Linux oder Mac arbeiten, denn dieser Test ist plattformunabhängig:

In []: for i in [platform.linux_distribution(),platform.mac_ver(),platform.win32_ver()]:
   ....:     if i[0]:
   ....:         print 'Version: ',i[0]

4voto

Stefan Gruenwald Punkte 2482

Prüfen Sie die verfügbaren Tests mit der Modulplattform und drucken Sie die Antwort für Ihr System aus:

import platform

print dir(platform)

for x in dir(platform):
    if x[0].isalnum():
        try:
            result = getattr(platform, x)()
            print "platform."+x+": "+result
        except TypeError:
            continue

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