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