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

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

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

>>> isWindowsVista()
True

обратите внимание, что если вас интересуют только окна против Linux и т. д., вы можете использовать if os.name= = "nt":

Ben Page 14.09.2012 16:54
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
25
1
16 831
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

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

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

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

Jeremy Brown 13.10.2008 16:27

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

David Heffernan 28.12.2010 23:59

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

DzinX 17.01.2011 14:36

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

David Heffernan 17.01.2011 14:52

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

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

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

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

DzinX 13.10.2008 16:24

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

David Heffernan 28.12.2010 23:58

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

Piotr Dobrogost 30.10.2011 22:32
Ответ принят как подходящий

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

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

DzinX 14.10.2008 13:03

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

AhmetB - Google 03.07.2010 00:59

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

sam 19.11.2010 19:05

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

David Heffernan 28.12.2010 23:56

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

Giampaolo Rodolà 27.12.2013 21:10

он показывает Windows 7 с Python 2.7.14 на Server 2008 R2

oybek.t 16.03.2019 00:05

Может помочь идея от 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

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

или же

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

Другие вопросы по теме