2009-08-25 8 views
131

Znalazłem moduł platformy, ale mówi, że zwraca "Windows" i zwraca "Microsoft" na moim komputerze. Zauważyłem w innym wątku tutaj na stackoverflow czasami zwraca "Vista".Jak sprawdzić, czy używam systemu Windows w Pythonie?

Pytanie brzmi: jak wykonać implantację?

if isWindows(): 
    ... 

W kompatybilny sposób? Jeśli będę musiał sprawdzać takie rzeczy jak "Vista", to pęknie, gdy pojawi się kolejna wersja systemu Windows.


Uwaga: Odpowiedzi twierdząc, że jest to duplikat pytanie właściwie nie odpowiedzieć na pytanie isWindows. Odpowiadają na pytanie "jaka platforma". Ponieważ wiele smaków okien nie istnieje, żaden z nich nie opisuje kompleksowo, jak uzyskać odpowiedź na isWindows.

+0

podobne do http: // stackoverflow .com/questions/196930/how-to-check-if-os-is-vista-in-python – monkut

+3

"Powinien istnieć jeden - a najlepiej tylko jeden - czysty sposób na zrobienie tego." Niestety, python daje nam co najmniej trzy sposoby .. –

Odpowiedz

175

Pythona os moduł

szczególności

os.name Nazwę pracy modułu zależnego systemu importowanego. Zarejestrowano następujące nazwy: : "posix", "nt", "mac", "os2", "ce", "java", "riscos".

W twoim przypadku, chcesz sprawdzić 'NT' jako os.name wyjścia:

import os 

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

'nt' to wartość dla systemu Windows – shuckc

+0

Co zwykle zwraca Linux? posix? –

+1

@AndiJay - tak, ale powinno być łatwe do przetestowania! –

39

powinien móc polegać na os .name.

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

edit: Teraz powiedziałbym najwyraźniejszy sposób to zrobić za pośrednictwem modułu platform, jak na drugiej odpowiedzi.

18

w sys TOO:

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

Jestem na 64-bitowym systemie Windows i to daje mi "win32" :) – Hut8

38

Używasz 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. 

Jeśli to nie działa, może spróbować platform.win32_ver a jeśli to nie wyjątek, jesteś na Windows; ale nie wiem, czy jest to zgodne z 64-bitowym, ponieważ ma 32 w nazwie.

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

Ale prawdopodobnie jest to droga, jak wspomnieli inni.


Na co warto, oto kilka z sprawdzają dla Windows w platform.py sposobów:

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

Na 64-bitowym komputerze, z Windows 7 (64-bitowym systemem operacyjnym) jest to wyjście: Python 3.1.1 (r311: 74483, 17 sierpnia 2009, 16:45:59) [MSC v.1500 64 bit (AMD64)] na win32 >>> print (sys.platform) win32 >>> platform.win32_ver() ('post2008Server', '6.1 .7100 ',' ',' Multiprocessor Free ') Zwróć uwagę, że kompilacja jawnie nazywa to win32. – Francesco

+0

Ups, myślałem, że dane wyjściowe zostałyby sformatowane lepiej. mam nadzieję, że i tak to przeczytasz. – Francesco

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

lub

import sys 
is_windows = hasattr(sys, 'getwindowsversion') 
Powiązane problemy