2008-08-05 23 views
389

Was muss ich sehen, um zu sehen, ob ich unter Windows, Unix usw. bin?Python: Auf welchem ​​OS laufe ich?

+2

siehe (http://bugs.python.org/issue12326) für Details! – arnkore

+2

Hier ist eine verwandte Frage: [Überprüfen Sie den Namen der Linux Distribution] (http://stackoverflow.com/q/2756737/320399). – blong

Antwort

482
>>> import os 
>>> print os.name 
posix 
>>> import platform 
>>> platform.system() 
'Linux' 
>>> platform.release() 
'2.6.22-15-generic' 

Der Ausgang des platform.system() ist wie folgt:

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

See:

+11

Warum sollte ich "Plattform" vor 'sys.platform' bevorzugen? – matth

+5

@matth Etwas konsistentere Ausgabe. d. h. 'platform.system()' gibt '' Windows "' anstelle von '" win32 "' zurück. 'sys.platform' enthält auch' "linux2" 'auf alten Versionen von Python, während es nur' "linux" 'auf neueren enthält. 'platform.system()' hat immer nur '' Linux'' zurückgegeben. – erb

+0

Auf Mac OS X, Plattform.System() immer "Darwin" zurück? oder ist es anders möglich? –

141

Dang - lbrandy schlägt mich bis zum Schlag, aber das bedeutet nicht, dass ich Ihnen nicht die Systemergebnisse für Vista liefern kann!

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

... und ich kann niemand die nicht glauben, dass ein 10 noch für Windows geschrieben:

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

Windows 7: 'platform.release()' ''7'' – Hugo

+3

Also, ja, ich habe gerade' platform.release() 'auf meinem * Windows * * 10 * ausgeführt, und es hat mir definitiv nur' '8' 'gegeben '. Vielleicht habe ich Python vor dem Upgrade installiert, aber wirklich ?? – Codesmith

+0

Ich hätte gedacht, dass es wahrscheinlicher ist, dass Sie von Windows 8 upgraden (im Gegensatz zu einer sauberen Installation) und was auch immer Python in der Registry nachschaut oder was noch übrig ist? – OJFord

108

Für die Aufzeichnung auf dem Mac die Ergebnisse hier:

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

können Sie Verwenden Sie auch sys.platform, wenn Sie bereits sys importiert haben und kein anderes Modul

>>> import sys 
>>> sys.platform 
'linux2' 
>>> import sys 
>>> sys.platform 
'linux2' 
importieren möchten
+0

Hat einer der Ansätze irgendwelche Vorteile, neben dem Importieren eines anderen Moduls? – matth

+0

Scoping ist der Hauptvorteil. Sie möchten so wenig globale Variablennamen wie möglich haben. Wenn Sie bereits "sys" als globalen Namen haben, sollten Sie keinen weiteren Namen hinzufügen. Aber wenn Sie "sys" noch nicht verwenden, könnte die Verwendung von "_platform" beschreibender sein und weniger wahrscheinlich mit einer anderen Bedeutung kollidieren. – sanderd17

17

Ich tue dies

import sys 
print sys.platform 

Docs hier: sys.platform.

Alles, was Sie brauchen, ist wahrscheinlich in der sys-Modul.

10

Ich verwende das WLST-Tool, das mit Weblogic geliefert wird, und es implementiert das Plattformpaket nicht.

wls:/offline> import os 
wls:/offline> print os.name 
java 
wls:/offline> import sys 
wls:/offline> print sys.platform 
'java1.5.0_11' 

Neben Patchen des Systems javaos.py (issue with os.system() on windows 2003 with jdk1.5) (was ich nicht tun kann, ich WebLogic aus der Box verwenden), ist es das, was ich benutze:

def iswindows(): 
    os = java.lang.System.getProperty("os.name") 
    return "win" in os.lower() 
9
>>> import platform 
>>> platform.system() 
5

in der gleichen Ader ....

import platform 
is_windows=(platform.system().lower().find("win") > -1) 

if(is_windows): lv_dll=LV_dll("my_so_dll.dll") 
else:   lv_dll=LV_dll("./my_so_dll.so") 
+9

Dies ist problematisch, wenn Sie auf einem Mac sind, da plattform.system() "Darwin" auf einem Mac und "Darwin" .lower() zurückgibt. Find ("win") = 3. – mishaF

7

/usr/bin/python3.2

def cls(): 
    from subprocess import call 
    from platform import system 

    os = system() 
    if os == 'Linux': 
     call('clear', shell = True) 
    elif os == 'Windows': 
     call('cls', shell = True) 
+2

Willkommen auf SO, hier ist es eine gute Praxis zu erklären, warum Sie Ihre Lösung und nicht nur wie verwenden. Das wird Ihre Antwort wertvoller machen und dem Leser helfen, besser zu verstehen, wie Sie es tun. Ich schlage auch vor, dass Sie einen Blick auf unsere FAQ werfen: http://stackoverflow.com/faq. – ForceMagic

+0

Gute Antwort, vielleicht sogar auf Augenhöhe mit der ursprünglichen Antwort. Aber du könntest erklären warum. – vgoff

8

Für Jython der einzige Weg os Name, den ich gefunden zu bekommen, ist os.name Java-Eigenschaft zu überprüfen (versucht mit sys, os und platform Module für Jython 2.5.3 auf WinXP):

def get_os_platform(): 
    """return platform name, but for Jython it uses os.name Java property""" 
    ver = sys.platform.lower() 
    if ver.startswith('java'): 
     import java.lang 
     ver = java.lang.System.getProperty("os.name").lower() 
    print('platform: %s' % (ver)) 
    return ver 
24

Wenn Sie Benutzer lesbare Daten wollen aber noch detailliert, können Sie platform.platform()

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

Hier ein paar verschiedenen möglichen Anrufe verwenden Sie machen können, um festzustellen, wo Sie sind

import platform 
import sys 

def linux_distribution(): 
    try: 
    return platform.linux_distribution() 
    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(platform.dist()), 
linux_distribution(), 
platform.system(), 
platform.machine(), 
platform.platform(), 
platform.uname(), 
platform.version(), 
platform.mac_ver(), 
)) 

Die Ausgaben dieses Skripts lief auf ein paar verschiedene Systeme ist hier verfügbar: https://github.com/hpcugent/easybuild/wiki/OS_flavor_name_version

6

Interessante Ergebnisse auf Windows 8:

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

Edit: Das ist ein bug

5

Wenn Sie nicht für die Kernel-Version usw., aber der Suche nach der Linux-Distribution der Suche können Sie die folgende verwenden möchten

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 

Offensichtlich wird dies nur funktionieren, wenn Sie diese auf Linux laufen. Wenn Sie plattformübergreifend mehr generisches Skript verwenden möchten, können Sie dies mit Codebeispielen aus anderen Antworten kombinieren.

69

Beispielcode unterscheiden OS Python:

from sys import platform as _platform 

if _platform == "linux" or _platform == "linux2": 
    # linux 
elif _platform == "darwin": 
    # MAC OS X 
elif _platform == "win32": 
    # Windows 
elif _platform == "win64": 
    # Windows 64-bit 
+1

Ist dieser Beispielcode von einem Python-Modul? Dies ist die einzige Antwort, die tatsächlich die Frage beantwortet. –

+4

Für fuzzier Ergebnisse, '' _platform.startswith ('linux') –

+1

ursprüngliche Antwort wie hier zu sehen http://Stackoverflow.com/a/8220141/3286832 – Yannis

3

Überprüfen Sie die verfügbaren Tests mit 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 
4

versuchen, dieses:

import os 

os.uname() 

und Sie können es machen:

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

os.uname() funktioniert nicht mehr ab Python 3.5. –

+1

Auch 'os.uname()' ist nicht verfügbar unter Windows: https://docs.python.org/2/library/os.html#os.uname _Verfügbarkeit: ** neuere Versionen von Unix. ** _ – ccpizza

6

Achten Sie darauf, wenn Sie unter Windows mit Cygwin sind, wo os.nameposix ist.

>>> import os, platform 
>>> print os.name 
posix 
>>> print platform.system() 
CYGWIN_NT-6.3-WOW 
-4

Nur der Vollständigkeit halber scheint die Umgebungsvariable "OS" überall definiert zu sein. Unter Windows XP/7/8/10 ist es auf "Windows_NT" eingestellt. Unter Linux SuSE SP2 ist es auf "x86-64 linux sles11 [2]" eingestellt. Ich habe keinen Zugriff auf OS-X oder BSD-Maschinen, wäre interessant, auch dort zu überprüfen.

import os 

os_name = os.getenv("OS") 
if os_name == "Windows_NT": 
    # Windows 
elif "linux" in os_name: 
    # Linux 
elif ... 
3

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

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

, dass diese Ausgabe gibt:

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

Ein schönes und ordentlich Layout für einen bestimmten Zweck Reporting können mit dieser Linie erreicht werden

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 

in der Regel ist die Version Was fehlt Betriebssystem aber Sie sollten wissen, ob Sie Windows, Linux oder Mac eine Plattform unabhängige Weise verwenden, um diesen Test zu verwenden:

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

Verwenden Sie die Schlüsselwörter import os und os.name.

2

Wie über eine neue Antwort:

import psutil 
psutil.OSX  #True 
psutil.WINDOWS #False 
psutil.LINUX #False 

Dies ist der Ausgang wäre, wenn ich OSX wurde unter Verwendung

+2

Wahrscheinlich die eleganteste aller Antworten – jsphpl

0

Wenn Sie MacOS X laufen und laufen platform.system() Sie bekommen Darwin weil macOS X auf gebaut Apples Darwin OS. Darwin ist der Kern von macOS X und ist im Wesentlichen macOS X ohne GUI.

Verwandte Themen