2008-10-13 16 views
24

¿Cómo, de la manera más simple posible, distinguir entre Windows XP y Windows Vista, usando Python y pywin32 o wxPython?¿Cómo comprobar si el sistema operativo es Vista en Python?

Esencialmente, necesito una función que llama devolverá True si y sólo si sistema operativo actual es Vista:

>>> isWindowsVista() 
True 
+0

nota que si usted es ventanas sólo interesados ​​vs Linux, etc se puede usar ' if os.name == "nt": ' –

Respuesta

40

Python tiene el encantador módulo de "plataforma" para ayudarte.

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

NOTA: Como se ha mencionado en los comentarios valores propios no pueden ser devueltos al utilizar versiones anteriores de pitón.

+1

Python 2.5.2 dice ('', '', '', '') a platform.win32_ver() en Vista, pero Python 2.6 responde 'Vista' correctamente. ¡Gracias! – DzinX

+0

mejor y claro. tenga en cuenta que su programa puede no funcionar hoy ya que se lanzó win7 y también es 6.1 –

+0

Como lo indicó Ahmet, esto no funcionará si ejecuta versiones anteriores de Python en Windows 7. Python 2.5.4 devuelve lo siguiente en Windows 7: ' platform.release() => 'Vista'', 'platform.win32_ver() => (' ',' 6.1.7600 ',' ',' Multiprocessor Free ')'. No es sorprendente dado que 2.5 es viejo, pero algo a tener en cuenta. – sam

8

La solución más sencilla que he encontrado es ésta:

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

Como con todas las funciones en win32api, obténgalo directamente de la boca del caballo - http://msdn.microsoft.com/en-us/library/ms724833(VS.85). aspx La tupla devuelta corresponde aproximadamente a los campos de OSVERSIONSINFOEX –

+2

Esto también está mal. Volverá a ser cierto para Windows 7 y posiblemente lo que venga después de Windows 7. Vista tiene la versión 6.0, Windows 7 tiene la versión 6.1. Realmente gente, ¡no es tan difícil hacerlo bien! –

+0

@David Heffernan: compruebe la marca de tiempo de la publicación, esto fue MANERA antes de que saliera Windows 7 :) pero gracias por señalar esto. Actualicé el código para verificar el número de versión menor, creo que debería ser suficiente esta vez. – DzinX

8

La solución utilizada en Twisted, que no necesita pywin32:

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

Tenga en cuenta que también coincidirá con Windows Server 2008

+0

¡Gracias! No me importa usar pywin32 o wxPython (los tengo importados de todos modos), pero me gustaría asegurarme de que el sistema operativo sea Vista. No sé demasiado sobre Server 2008, por lo que no me gustaría que mi código específico de Vista se ejecute en él. – DzinX

+2

No entiendo los votos positivos. Windows 7 también tiene una versión mayor igual a 6. Si el propósito es isVistaOrLater, entonces el código debería decir> = 6. Entonces, como interpretes esto, está mal. –

+0

@DavidHeffernan Esta respuesta se dio un año antes de que se lanzara Windows7. –

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

o

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