2010-05-12 6 views
2

Je suis en train d'écrire une fonction qui imprime des informations détaillées version de Windows, la sortie peut être un tuple comme celui-ci:éditions de Windows

('32bit', 'XP', 'Professional', 'SP3', 'English') 

Il soutiendra Windows XP et plus. Et je suis coincé avec obtenir l'édition de Windows, par exemple, "Professional", "Home Basic", etc.

platform.win32_ver() ou sys.getwindowsversion() ne le fait pas pour moi. Presque win32api.GetVersionEx(1) presque atteint, mais il semble que cela ne me dit pas assez d'informations.

Puis j'ai vu GetProductInfo(), mais on dirait que ce n'est pas implémenté dans pywin32.

Des indices?

+0

ne semble pas pythonique pour essayer de faire un code python dépendant de la plate-forme ... :( – ykatchou

Répondre

3

Vous pouvez utiliser ctypes pour accéder à n'importe quelle fonction WinAPI. GetProductInfo() est dans windll.kernel32.GetProductInfo.

J'ai trouvé un Python version (sous licence GPL, mais vous pouvez voir l'utilisation des fonctions ici) du MSDN "Getting the System Version" example.

+0

Super! Comment avez-vous trouvé cette version python? –

+0

en cherchant "windll.kernel32.GetProductInfo" sur Google –

2

Si ctypes ne fonctionne pas (? En raison de 32 vs 64 bits), ce hack devrait:

def get_Windows_name(): 
    import subprocess, re 
    o = subprocess.Popen('systeminfo', stdout=subprocess.PIPE).communicate()[0] 
    try: o = str(o, "latin-1") # Python 3+ 
    except: pass 
    return re.search("OS Name:\s*(.*)", o).group(1).strip() 

print(get_Windows_name()) 

Ou tout simplement lire le Registre:

try: import winreg 
except: import _winreg as winreg 
with winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, r"SOFTWARE\Microsoft\Windows NT\CurrentVersion") as key: 
    print(winreg.QueryValueEx(key, "EditionID")[0]) 

Ou utilisez ceci:

from win32com.client import GetObject 
wim = GetObject('winmgmts:') 
print([o.Caption for o in wim.ExecQuery("Select * from Win32_OperatingSystem")][0]) 
+0

. + 1 pour les réponses pratiques – Simon

2

J'ai essayé quelques-unes des solutions ci-dessus, mais je cherchais quelque chose qui m'a donné "Windows XP" ou "Windows 7". Il y a quelques autres méthodes dans platform qui exposent encore plus d'informations.

import platform 
print platform.system(),platform.release()