Обнаружение версии Windows в Python не работает

Я встраиваю компонент в скрипт Python 2.7, который определяет, на какой версии Windows работает скрипт. Я нашел хорошее решение, расположенное здесь, в другом сообщении о переполнении стека, которое показалось довольно простым и соответствовало моим потребностям (очевидно, я использовал второй ответ). К сожалению, это не похоже на работу. Я пробовал этот сценарий на двух системах (32-битная Win7 и 64-битная Win7), и он каждый раз выводит мой оператор else.

Вот мой вывод:

Loaded os_version_detection function!
Detecting family of Windows...
Detected OS: Unknown!
sys.getwindowsversion(major=6, minor=1, build=7601, platform=2, service_pack='Service Pack 1')

Может кто-то указать, что мне не хватает. Такое ощущение, что исправление должно быть довольно простым (пропущенный символ, пропущенное выражение, опечатка и т. Д.), Но я просто не могу понять, как это сделать.

Вот мой код:

def os_version_detection(started_by_function):
    global os_version
    global os_arch

    # Determine what family of Windows is installed.
    print("Loaded os_version_detection function!")
    print("Detecting family of Windows...")
    sys_info_raw = sys.getwindowsversion()
    if 'major=6, minor=2' in sys_info_raw:
        os_version = "Win8"
        print("Detected OS: Windows 8/2012!")

    elif 'major=6, minor=1' in sys_info_raw:
        os_version = "Win7"
        print("Detected OS: Windows 7/2008!")

    elif 'major=6, minor=0' in sys_info_raw:
        os_version = "WinVista"
        print("Detected OS: Windows Vista!")

    elif 'major=5, minor=2' in sys_info_raw:
        os_version = "Win2003"
        print("Detected OS: Windows 2003!")

    elif 'major=5, minor=1' in sys_info_raw:
        os_version = "WinXP"
        print("Detected OS: Windows XP!")

    else:
        os_version = "Unknown"
        print("Detected OS: Unknown!")
        print sys_info_raw

Заранее спасибо!

1 ответ

Решение

Хотя sys_info_raw при печати выглядит как строка, ее тип на самом деле <type 'sys.getwindowsversion'>что, видимо, не относится к in оператор так же, как это делает тип str. Попробуйте выполнить явное преобразование в строку перед выполнением проверки.

print("Loaded os_version_detection function!")
print("Detecting family of Windows...")
sys_info_raw = str(sys.getwindowsversion())

Результат (на моей машине):

Loaded os_version_detection function!
Detecting family of Windows...
Detected OS: Windows 7/2008!
Другие вопросы по тегам