





Самое простое решение, которое я нашел, - это:
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
Это тоже неправильно. Это будет верно для Windows 7 и, возможно, для всего, что будет после Windows 7. Vista имеет версию 6.0, Windows 7 - версию 6.1. На самом деле люди, это не так уж и сложно сделать правильно!
@ Дэвид Хеффернан: Проверьте временную метку поста, это было ДО выхода Windows 7 :), но спасибо, что указали на это. Я обновил код, чтобы проверить наличие младшего номера версии, думаю, на этот раз этого должно хватить.
все зависит от того, хотите ли вы, чтобы ваш код запускался один раз или запускался снова и снова.
Решение, используемое в 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, работал на нем.
Я не понимаю голосов за. Windows 7 также имеет основную версию, равную 6. Если намерение должно быть isVistaOrLater, тогда в коде должно быть указано> = 6. Итак, как бы вы это ни интерпретировали, это неверно.
@DavidHeffernan Этот ответ был дан за год до выпуска Windows 7.
В 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". Спасибо!
лучше и ясно. обратите внимание, что ваша программа может не работать сегодня, так как выпущена win7, а также 6.1
Как указал Ахмет, это не сработает, если вы запустите более старые версии Python в Windows 7. Python 2.5.4 возвращает следующее в Windows 7: platform.release() => 'Vista', platform.win32_ver() => ('', '6.1.7600', '', 'Multiprocessor Free'). Неудивительно, учитывая, что версия 2.5 устарела, но есть о чем знать.
@sam, нет проблем с интерпретацией этого, вы смотрите на 6.1.7600 и решаете, что 6.1 означает Windows 7. Vista будет 6.0.
Платформенный модуль почти прекрасен. На самом деле я считаю это в основном бесполезным: он не дает вам переносимого и удобного API, чтобы выяснить, на какой версии платформы вы работаете.
он показывает Windows 7 с Python 2.7.14 на Server 2008 R2
Может помочь идея от 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.
обратите внимание, что если вас интересуют только окна против Linux и т. д., вы можете использовать
if os.name= = "nt":