2009-08-25 16 views
131

Encontré el módulo de la plataforma pero dice que devuelve 'Windows' y está devolviendo 'Microsoft' en mi máquina. Noté en otro hilo aquí en stackoverflow que a veces devuelve 'Vista'.¿Cómo puedo verificar si estoy ejecutando Windows en Python?

Entonces, la pregunta es, ¿cómo implemement?

if isWindows(): 
    ... 

¿De forma compatible con el futuro? Si tengo que verificar cosas como 'Vista', se romperá cuando salga la próxima versión de Windows.


Nota: Las respuestas afirman que esto es una pregunta duplicado en realidad no responder a la pregunta isWindows. Responden la pregunta "qué plataforma". Dado que existen muchos tipos de ventanas, ninguna de ellas describe exhaustivamente cómo obtener una respuesta de isWindows.

+0

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

+3

"Debería haber una, y preferiblemente solo una, forma obvia de hacerlo". Por desgracia, Python nos da al menos tres formas ... –

Respuesta

175

Python os módulo

Específicamente

os.name El nombre del módulo dependiente sistema operativo importado. Los siguientes nombres de han sido registrados: 'posix', 'nt', 'mac', 'os2', 'ce', 'java', 'riscos'.

En su caso, que desea comprobar si hay 'NT' es os.name de salida:

import os 

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

'nt' es el valor de windows – shuckc

+0

¿Qué devuelve linux normalmente? posix? –

+1

@AndiJay - sí, pero debería ser lo suficientemente fácil de probar! –

39

usted debería ser capaz de confiar en os .name.

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

edición: Ahora yo diría que la forma más clara de hacerlo es a través del módulo platform, según la otra respuesta.

18

en sys:

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

Estoy en Windows de 64 bits y esto me da 'win32' :) – Hut8

38

¿Está utilizando 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. 

Si eso no funciona, quizás prueba platform.win32_ver y si no plantea una excepción, está en Windows; pero no sé si es compatible con 64 bits, ya que tiene 32 en el nombre.

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

Pero os.name es probablemente el camino a seguir, como otros han mencionado.


Por si sirve de algo, aquí hay algunas de las formas en que comprueban para Windows en 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

En una máquina de 64 bits, con Windows 7 (sistema operativo de 64 bits) esta es la salida: Python 3.1.1 (r311: 74483, 17 de agosto 2009, 16:45:59) [MSC v.1500 64 bit (AMD64)] en win32 >>> print (sys.platform) win32 >>> platform.win32_ver() ('post2008Server', '6.1 .7100 ',' ',' Sin multiprocesador ') Tenga en cuenta que la compilación lo llama explícitamente win32. – Francesco

+0

Vaya, pensé que la salida se habría formateado mejor. espero que puedas leerlo de todos modos. – Francesco

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

o

import sys 
is_windows = hasattr(sys, 'getwindowsversion') 
Cuestiones relacionadas