2009-08-25 4 views
131

J'ai trouvé le module de plate-forme, mais il dit qu'il renvoie «Windows» et qu'il renvoie «Microsoft» sur ma machine. Je remarque dans un autre fil ici sur stackoverflow qu'il renvoie parfois 'Vista'. Donc, la question est de savoir comment implémenter?Comment vérifier si je cours sous Windows en Python?

if isWindows(): 
    ... 

D'une manière compatible avant? Si je dois vérifier des choses comme 'Vista', alors il se cassera quand la prochaine version de Windows sortira.


Note: Les réponses invoquaient c'est une double question ne répond pas vraiment à la question isWindows. Ils répondent à la question "quelle plate-forme". Puisque de nombreuses variantes de fenêtres existent, aucune d'entre elles ne décrit complètement comment obtenir une réponse de isWindows.

+0

similaires à http: // stackoverflow .com/questions/196930/comment-vérifier-si-os-est-vista-en-python – monkut

+3

"Il devrait y avoir une - et de préférence une seule - façon évidente de le faire." Hélas, python nous donne au moins trois façons. –

Répondre

175

Module python os

Plus précisément

os.name Le nom du module dépendant de fonctionnement du système importé. Les noms suivants ont actuellement été enregistrés: 'posix', 'nt', 'mac', 'os2', 'ce', 'java', 'riscos'.

Dans votre cas, vous voulez vérifier pour 'nt' comme os.name sortie:

import os 

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

'nt' est la valeur pour windows – shuckc

+0

Que renvoient normalement linux? posix? –

+1

@AndiJay - oui, mais devrait être assez facile à tester! –

39

Vous devriez pouvoir compter sur os .name.

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

edit: Je dirais que la façon la plus claire de le faire est via le module platform, selon l'autre réponse.

18

dans sys aussi:

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

Je suis sur Windows 64 bits et cela me donne 'win32' :) – Hut8

38

vous utilisez 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 cela ne fonctionne pas, peut-être essayer platform.win32_ver et si elle ne soulève pas une exception, vous êtes sous Windows; mais je ne sais pas si c'est compatible en 64 bits, puisqu'il en a 32 dans le nom.

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

Mais os.name est probablement le chemin à parcourir, comme d'autres l'ont mentionné.


Pour ce que ça vaut la peine, voici quelques-unes des façons dont ils vérifient pour Windows dans 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

Sur une machine 64 bits, avec Windows 7 (64 bits OS) c'est la sortie: Python 3.1.1 (r311: 74483, 17 août 2009, 16:45:59) [MSC v.1500 64 bits (AMD64)] sur win32 >>> print (sys.platform) win32 >>> platform.win32_ver() ('post2008Server', '6.1 .7100 ',' ',' Multiprocesseur Free ') Notez que la construction l'appelle explicitement win32. – Francesco

+0

Oups, je pensais que la sortie aurait été mieux formatée. J'espère que vous pouvez le lire quand même. – Francesco

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

ou

import sys 
is_windows = hasattr(sys, 'getwindowsversion') 
Questions connexes