Как проверить, является ли ОС Vista на Python?

#python #windows #windows-vista #wxpython #pywin32

Вопрос:

Как самым простым способом отличить Windows XP от Windows Vista, используя Python и pywin32 или wxPython?

По сути, мне нужна функция, которая при вызове вернет значение True, если текущая ОС-Vista:

 >>> isWindowsVista()
True
 

Комментарии:

1. обратите внимание, что если вас интересует только windows vs linux и т. Д., Вы можете использовать if os.name=="nt":

Ответ №1:

В Python есть прекрасный модуль «платформа», который поможет вам в этом.

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

ПРИМЕЧАНИЕ: Как упоминалось в комментариях, правильные значения могут не возвращаться при использовании более старых версий python.

Комментарии:

1. Python 2.5.2 говорит («, «, «, «) для platform.win32_ver() в Vista, но Python 2.6 правильно отвечает «Vista». Спасибо!

2. лучше и понятнее. пожалуйста, обратите внимание, что ваша программа может не работать сегодня, так как выпущена win7, а также 6.1

3. Как указал Ахмет, это не сработает, если вы запустите более старые версии Python в Windows 7. Python 2.5.4 возвращает следующее в Windows 7: platform.release() => 'Vista' , platform.win32_ver() => ('', '6.1.7600', '', 'Multiprocessor Free') . Неудивительно, учитывая, что 2.5-это старый, но кое-что, о чем следует знать.

4. @sam нет проблем с интерпретацией этого, вы смотрите на 6.1.7600 и решаете, что 6.1 означает Windows 7. Vista будет 6.0.

5. Модуль платформы почти прекрасен. На самом деле я считаю, что это в основном бесполезно: это не дает вам портативного и удобного API, чтобы выяснить, на какой версии платформы вы находитесь.

Ответ №2:

Решение, используемое в Twisted, для которого не требуется pywin32:

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

Обратите внимание, что он также будет соответствовать Windows Server 2008.

Комментарии:

1. Спасибо! Я не возражаю против использования pywin32 или wxPython (я все равно их импортировал), но я хотел бы быть уверенным, что ОС Vista. Я не слишком много знаю о сервере 2008, поэтому не хотел бы, чтобы на нем запускался мой код, специфичный для Vista.

2. Я не понимаю, почему проголосовали «за». Windows 7 также имеет основную версию, равную 6. Если намерение должно быть isVistaOrLater, то в коде должно быть написано >= 6. Так что, как бы вы это ни интерпретировали, это неправильно.

3. @DavidHeffernan Этот ответ был дан за год до выпуска Windows7.

Ответ №3:

Самое простое решение, которое я нашел, это:

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

Комментарии:

1. Как и со всеми функциями в win32api, получите это прямо из уст лошади — msdn.microsoft.com/en-us/library/ms724833(VS.85).aspx Возвращенный кортеж примерно соответствует полям OSVERSIONSINFOEX

2. Это тоже неправильно. Он вернет значение true для Windows 7 и, возможно, для всего, что будет после Windows 7. Vista имеет версию 6.0, Windows 7 имеет версию 6.1. На самом деле, люди, это не так сложно исправить!

3. @Дэвид Хеффернан: Проверьте метку времени в сообщении, это было задолго до выхода Windows 7 🙂 но спасибо, что указали на это. Я обновил код, чтобы проверить наличие второстепенного номера версии, я думаю, что на этот раз этого должно быть достаточно.

4. все зависит от того, хотите ли вы, чтобы ваш код выполнялся один раз или выполнялся снова и снова.

Ответ №4:

Идея из http://www.brunningonline.net/simon/blog/archives/winGuiAuto.py.html может помочь, что в принципе может ответить на ваш вопрос:

 win_version = {4: "NT", 5: "2K", 6: "XP"}[os.sys.getwindowsversion()[0]]
print "win_version=", win_version
 

Ответ №5:

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

или

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