Подтвердить что ты не робот

Надежное обнаружение Windows в Python

Я работаю над несколькими инструментами Linux и должен предотвратить установку в Windows, поскольку это зависит от FHS и поэтому бесполезно на этой платформе. Функция platform.platform приближается, но возвращает только строку.

К сожалению, я не знаю, что искать в этой строке для получения надежного результата. Кто-нибудь знает, что искать или кто-нибудь знает о другой функции, которую я здесь отсутствует?

4b9b3361

Ответ 1

>>> import platform
>>> platform.system()
'Windows'

Ответ 2

Для тех, кто пришел сюда, чтобы найти способ обнаружения Cygwin с Python (в отличие от просто обнаружения Windows), вот некоторые примеры возвращаемых значений из os.name и platform.system на разных платформах

OS/build     | os.name | platform.system() 
-------------+---------+-----------------------
Win32 native | nt      | Windows
Win32 cygwin | posix   | CYGWIN_NT-5.1*
Win64 native | nt      | Windows
Win64 cygwin | posix   | CYGWIN_NT-6.1-WOW64*
Linux        | posix   | Linux

С этого момента, как отличить родной Windows и Cygwin, должно быть очевидно, хотя я не уверен, что это будущее доказательство.

* номера версий для XP и Win7 соответственно, не полагайтесь на них

Ответ 3

В моем окне Windows platform.system() возвращает 'Windows'.

Однако я не уверен, почему вы беспокоитесь. Если вы хотите ограничить платформу, она работает в технологическом плане, я бы использовал белый список, а не черный список.

На самом деле, я бы не сделал это технологически вообще, потому что, возможно, следующая версия Python может иметь Win32/Win64 вместо Windows (для черных списков) и *nix вместо Linux (для белого -listing).

Мой совет - просто указать, что это за требования, и, если пользователь решил игнорировать это, что их проблема. Если они сообщают, что получили сообщение об ошибке "Не могу найти FHS", и они признают, что они работают в Windows, нежно указывайте им, что это не поддерживаемая конфигурация.

Возможно, ваши клиенты достаточно умны, чтобы заставить FHS работать под Windows, чтобы ваш код работал. Они вряд ли оценят, что они тогда рассмотрят произвольное ограничение вашего программного обеспечения.

Это проблема, с которой сталкиваются разработчики программного обеспечения каждый день. Даже огромные организации не могут поддерживать каждую платформу и конфигурацию там.

Ответ 4

Попробуйте следующее:

import platform

if platform.system() == "Darwin":
    # Don't have Windows handy, but I'd expect "Win32" or "Windows" for it

Изменить: Просто увидел, что вы пробовали platform.platform()... platform.system() будет работать лучше для этого случая. Поверьте мне, используйте его. Темные углы лежат в обнаружении платформы.

distutils будет делать это тоже, если вы спросите его красиво.

Вы всегда можете сделать что-то плохое, как os.path.exists() в файле Windows... но platform так же надежно, как и в стандартной библиотеке Python.

Изменить 2: Другой полезный ответчик указал, что platform.system() в точности соответствует "Windows" на его машине под Windows.

Ответ 5

>>> import os
>>> os.name
'nt'

"Импортировано имя импортируемого модуля, зависящего от операционной системы. В настоящее время зарегистрированы следующие имена: 'posix', 'nt', 'mac', 'os2', 'ce', 'java', 'riscos'." (c) http://docs.python.org/library/os.html#os.name

import os
if os.name == 'nt':
    #yourcodehere

Ответ 6

С помощью (платформы)

system()
    Returns the system/OS name, e.g. 'Linux', 'Windows' or 'Java'.

    An empty string is returned if the value cannot be determined.