2009-08-25 13 views
131

Ich fand das Plattformmodul, aber es sagt, es gibt 'Windows' zurück und es gibt 'Microsoft' auf meinem Rechner zurück. Ich bemerke in einem anderen Thread hier auf stackoverflow es manchmal 'Vista' zurückgibt.Wie überprüfe ich, ob ich in Python unter Windows laufe?

So ist die Frage, wie Implementieren?

if isWindows(): 
    ... 

In einer vorwärtskompatiblen Weise? Wenn ich auf Dinge wie "Vista" achten muss, wird es brechen, wenn die nächste Version von Windows herauskommt.


Hinweis: Die Antworten behaupten dies eine doppelte Frage ist isWindows die Frage nicht wirklich beantworten. Sie beantworten die Frage "welche Plattform". Da viele Varianten von Windows existieren, beschreibt keiner von ihnen umfassend, wie man eine Antwort von isWindows erhält.

+0

Ähnlich wie http: // Stackoverflow .com/questions/196930/how-to-check-wenn-os-is-vista-in-python – monkut

+3

"Es sollte eine - und vorzugsweise nur eine - offensichtliche Möglichkeit, es zu tun." Ach, Python gibt uns mindestens drei Möglichkeiten .. –

Antwort

175

Python os Modul

Spezifisch

os.name Der Name des Betriebssystems abhängigen Modul importiert. Die folgenden Namen sind derzeit registriert: "posix", "nt", "mac", "os2", "ce", "Java", "Riscos".

In Ihrem Fall Sie für 'nt' als os.name Ausgang überprüfen:

import os 

if os.name == 'nt': 
    ... 
+30

'nt' ist der Wert für Windows – shuckc

+0

Was gibt normalerweise Linux zurück? Posix? –

+1

@AndiJay - Ja, aber sollte einfach genug sein, um zu testen! –

39

Sie sollten in der Lage auf os .name verlassen.

import os 
if os.name == 'nt': 
    # ... 

edit: Jetzt würde ich der klarste Weg sagen, dies zu tun über das platform Modul ist, wie pro der anderen Antwort. Auch

18

in sys:

import sys 
# its win32, maybe there is win64 too? 
is_windows = sys.platform.startswith('win') 
+1

Ich bin auf 64 Bit Windows und das gibt mir 'win32' :) – Hut8

38

Verwenden Sie platform.system?

 
system() 
     Returns the system/OS name, e.g. 'Linux', 'Windows' or 'Java'. 

     An empty string is returned if the value cannot be determined. 

Wenn das nicht funktioniert, vielleicht platform.win32_ver versuchen und wenn es nicht eine Ausnahme aufwirft, sind Sie auf Windows; aber ich weiß nicht, ob das vorwärtskompatibel zu 64-bit ist, da es 32 im Namen hat.

 
win32_ver(release='', version='', csd='', ptype='') 
     Get additional version information from the Windows Registry 
     and return a tuple (version,csd,ptype) referring to version 
     number, CSD level and OS type (multi/single 
     processor). 

Aber os.name ist wahrscheinlich der Weg zu gehen, wie andere bereits erwähnt haben.


Für was es wert ist, hier ein paar der Möglichkeiten, sie überprüfen für Windows in platform.py:

if sys.platform == 'win32': 
#--------- 
if os.environ.get('OS','') == 'Windows_NT': 
#--------- 
try: import win32api 
#--------- 
# Emulation using _winreg (added in Python 2.0) and 
# sys.getwindowsversion() (added in Python 2.3) 
import _winreg 
GetVersionEx = sys.getwindowsversion 
#---------- 
def system(): 

    """ Returns the system/OS name, e.g. 'Linux', 'Windows' or 'Java'.  
     An empty string is returned if the value cannot be determined. 
    """ 
    return uname()[0] 
+0

Auf einer 64-Bit-Maschine, mit Windows 7 (64-Bit-Betriebssystem) ist dies die Ausgabe: Python 3.1.1 (r311: 74483, Aug 17 2009, 16:45:59) [MSC v.1500 64 bit (AMD64)] auf win32 >>> print (sys.platform) win32 >>> platform.win32_ver() ('post2008Server', '6.1 .7100 ',' ',' Multiprocessor Free ') Beachten Sie, dass der Build explizit win32 aufruft. – Francesco

+0

Ups, ich dachte, die Ausgabe wäre besser formatiert worden. hoffe du kannst es trotzdem lesen. – Francesco

6
import platform 
is_windows = any(platform.win32_ver()) 

oder

import sys 
is_windows = hasattr(sys, 'getwindowsversion') 
Verwandte Themen