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

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

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

>>> isWindowsVista()
True

person DzinX    schedule 13.10.2008    source источник
comment
обратите внимание, что если вас интересуют только окна против Linux и т. д., вы можете использовать if os.name=="nt":   -  person Ben Page    schedule 14.09.2012


Ответы (4)


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

person monkut    schedule 14.10.2008
comment
Python 2.5.2 сообщает ('', '', '', '') для platform.win32_ver () в Vista, но Python 2.6 правильно отвечает "Vista". Спасибо! - person DzinX; 14.10.2008
comment
лучше и ясно. обратите внимание, что ваша программа может не работать сегодня, так как выпущена win7, а также 6.1 - person Ahmet Alp Balkan; 03.07.2010
comment
Как указал Ахмет, это не сработает, если вы запустите более старые версии Python в Windows 7. Python 2.5.4 возвращает следующее в Windows 7: platform.release() => 'Vista', platform.win32_ver() => ('', '6.1.7600', '', 'Multiprocessor Free'). Неудивительно, учитывая, что версия 2.5 устарела, но есть о чем знать. - person sam; 19.11.2010
comment
@sam нет проблем с интерпретацией этого, вы смотрите на 6.1.7600 и решаете, что 6.1 означает Windows 7. Vista будет 6.0. - person David Heffernan; 28.12.2010
comment
Платформенный модуль почти прекрасен. На самом деле я считаю это в основном бесполезным: он не дает вам переносимого и удобного API, чтобы выяснить, на какой версии платформы вы работаете. - person Giampaolo Rodolà; 27.12.2013
comment
он показывает Windows 7 с Python 2.7.14 на Server 2008 R2 - person oybek.t; 16.03.2019

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

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

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

person Thomas Hervé    schedule 13.10.2008
comment
Спасибо! Я не против использования pywin32 или wxPython (я все равно импортировал их), но я хотел бы быть уверен, что это Vista. Я не слишком много знаю о Server 2008, поэтому не хочу, чтобы мой код, специфичный для Vista, работал на нем. - person DzinX; 13.10.2008
comment
Я не понимаю голосов за. Windows 7 также имеет основную версию, равную 6. Если намерение должно быть isVistaOrLater, тогда в коде должно быть указано ›= 6. Итак, как бы вы это ни интерпретировали, это неверно. - person David Heffernan; 28.12.2010
comment
@DavidHeffernan Этот ответ был дан за год до выпуска Windows7. - person Piotr Dobrogost; 30.10.2011

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

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))
person DzinX    schedule 13.10.2008
comment
Как и все функции в win32api, получите его прямо из уст лошади - msdn.microsoft.com/en-us/library/ms724833 (VS.85) .aspx Возвращенный кортеж примерно соответствует полям OSVERSIONSINFOEX - person Jeremy Brown; 13.10.2008
comment
Это тоже неправильно. Это будет верно для Windows 7 и, возможно, для всего, что будет после Windows 7. Vista имеет версию 6.0, Windows 7 - версию 6.1. На самом деле люди, это не так уж и сложно сделать правильно! - person David Heffernan; 28.12.2010
comment
@ Дэвид Хеффернан: Проверьте временную метку поста, это было ДО выхода Windows 7 :), но спасибо, что указали на это. Я обновил код, чтобы проверить наличие младшего номера версии, думаю, на этот раз этого должно хватить. - person DzinX; 17.01.2011
comment
все зависит от того, хотите ли вы, чтобы ваш код запускался один раз или запускался снова и снова. - person David Heffernan; 17.01.2011

Идея от 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
person Deming    schedule 09.06.2013