Какой лучший способ получить версию Windows в Python?

Я собираюсь написать программу, которая выполняет проверку версии ОС Windows, так как я могу сделать это с помощью sys.windowsversion()[0] или с модулем платформы, который возвращает строку, а не int, что будет лучшим способом получить версию выпуска Windows?

3 ответа

Решение

Вы можете сделать это, позвонив sys.getwindowsversion, Например этот вывод:

>>> sys.getwindowsversion()
sys.getwindowsversion(major=6, minor=1, build=7601, platform=2, service_pack='Service Pack 1')

для Windows 7.

Источник: http://mail.python.org/pipermail/tutor/2003-November/026227.html

Обычный способ сделать это в C - использовать макрос _WIN32_WINNT, значения которого описаны здесь. sys.getwindowsversion () может косвенно использоваться для определения _WIN32_WINNT, так как он предоставляет все необходимые биты.

import sys

WIN_8 = (6, 2, 0)
WIN_7 = (6, 1, 0)
WIN_SERVER_2008 = (6, 0, 1)
WIN_VISTA_SP1 = (6, 0, 1)
WIN_VISTA = (6, 0, 0)
WIN_SERVER_2003_SP2 = (5, 2, 2)
WIN_SERVER_2003_SP1 = (5, 2, 1)
WIN_SERVER_2003 = (5, 2, 0)
WIN_XP_SP3 = (5, 1, 3)
WIN_XP_SP2 = (5, 1, 2)
WIN_XP_SP1 = (5, 1, 1)
WIN_XP = (5, 1, 0)

def get_winver():
    wv = sys.getwindowsversion()
    if hasattr(wv, 'service_pack_major'):  # python >= 2.7
        sp = wv.service_pack_major or 0
    else:
        import re
        r = re.search("\s\d$", wv.service_pack)
        sp = int(r.group(0)) if r else 0
    return (wv.major, wv.minor, sp)

Использование:

if get_winver() >= WIN_XP_SP3:
     ...

MSDN:

      import ctypes
   try: # >= win 8.1
       ctypes.windll.shcore.SetProcessDpiAwareness(2)
   except: # win 8.0 or less
       ctypes.windll.user32.SetProcessDPIAware()
Другие вопросы по тегам