2008-10-13 25 views
24

Jak w najprostszy możliwy sposób odróżnić system Windows XP i Windows Vista, używając Python i pywin32 lub wxPython?Jak sprawdzić, czy system operacyjny to Vista w języku Python?

Zasadniczo muszę funkcję o nazwie zwróci true wtedy i tylko wtedy prąd jest system operacyjny Vista:

>>> isWindowsVista() 
True 
+0

uwaga, że ​​jeśli jesteś zainteresowany tylko okna vs Linux etc można użyć ' jeśli os.name == "nt": ' –

Odpowiedz

40

Python ma piękny moduł "platformowy", który może Ci pomóc.

>>> import platform 
>>> platform.win32_ver() 
('XP', '5.1.2600', 'SP2', 'Multiprocessor Free') 
>>> platform.system() 
'Windows' 
>>> platform.version() 
'5.1.2600' 
>>> platform.release() 
'XP' 

UWAGA: Jak wspomniano w komentarzach prawidłowe wartości mogą nie zostać zwrócone podczas korzystania ze starszych wersji Pythona.

+1

Python 2.5.2 mówi ('', '', '', '') na platform.win32_ver() w systemie Vista, ale Python 2.6 poprawnie reaguje na "Vista". Dzięki! – DzinX

+0

najlepsze i jasne. Zauważ, że Twój program może nie działać dzisiaj, odkąd wypuszczono win7 i jest również 6.1 –

+0

Jak wskazał Ahmet, nie będzie działać, jeśli uruchomisz starsze wersje Pythona na Windows 7. Python 2.5.4 zwraca następujące informacje w Windows 7: ' platform.release() => 'Vista'', 'platform.win32_ver() => (' ',' 6.1.7600 ',' ',' Multiprocessor Free ')'. Nic dziwnego, biorąc pod uwagę, że 2.5 jest stary, ale coś, o czym należy pamiętać. – sam

8

Najprostszym rozwiązaniem znalazłem jest to jedno:

import sys 

def isWindowsVista(): 
    '''Return True iff current OS is Windows Vista.''' 
    if sys.platform != "win32": 
     return False 
    import win32api 
    VER_NT_WORKSTATION = 1 
    version = win32api.GetVersionEx(1) 
    if not version or len(version) < 9: 
     return False 
    return ((version[0] == 6) and 
      (version[1] == 0) and 
      (version[8] == VER_NT_WORKSTATION)) 
+0

Podobnie jak w przypadku wszystkich funkcji w win32api, pobierz go prosto z ust konia - http://msdn.microsoft.com/en-us/library/ms724833 (VS.85). aspx Zwrócona krotka z grubsza mapuje do pól OSVERSIONSINFOEX –

+2

To też jest złe. Zwróci true dla Windows 7 i ewentualnie cokolwiek przyjdzie po Windows 7. Vista ma wersję 6.0, Windows 7 ma wersję 6.1. Naprawdę ludzie, to nie jest takie trudne! –

+0

@ David Heffernan: Sprawdź znacznik czasu postu, to był WAY zanim pojawił się Windows 7 :) ale dziękuję za wskazanie tego. Zaktualizowałem kod, aby sprawdzić mniejszy numer wersji, myślę, że tym razem powinno wystarczyć. – DzinX

8

Rozwiązanie stosowane w skręcony, który nie potrzebuje pywin32:

def isVista(): 
    if getattr(sys, "getwindowsversion", None) is not None: 
     return sys.getwindowsversion()[0] == 6 
    else: 
     return False 

Należy pamiętać, że pasuje również do systemu Windows Server 2008

+0

Dzięki! Nie mam nic przeciwko używaniu pywin32 lub wxPython (mam je mimo wszystko zaimportowane), ale chciałbym mieć pewność, że system operacyjny to Vista. Nie wiem zbyt wiele o Server 2008, więc nie chciałbym, aby mój specyficzny dla Vista kod działał na nim. – DzinX

+2

Nie rozumiem głosów upowych. Windows 7 ma również główną wersję równą 6. Jeśli celem jest isVistaOrLater, kod powinien brzmieć> = 6. Tak więc, jakkolwiek to zinterpretujesz, jest to błędne. –

+0

@DavidHeffernan Ta odpowiedź została udzielona na rok przed wydaniem Windows7. –

0
import platform 
if platform.release() == "Vista": 
    # Do something. 

lub

import platform 
if "Vista" in platform.release(): 
    # Do something.