Ответ 1
>>> import platform
>>> platform.system()
'Windows'
Я работаю над несколькими инструментами Linux и должен предотвратить установку в Windows, поскольку это зависит от FHS и поэтому бесполезно на этой платформе. Функция platform.platform
приближается, но возвращает только строку.
К сожалению, я не знаю, что искать в этой строке для получения надежного результата. Кто-нибудь знает, что искать или кто-нибудь знает о другой функции, которую я здесь отсутствует?
>>> import platform
>>> platform.system()
'Windows'
Для тех, кто пришел сюда, чтобы найти способ обнаружения 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 соответственно, не полагайтесь на них
В моем окне Windows platform.system()
возвращает 'Windows'
.
Однако я не уверен, почему вы беспокоитесь. Если вы хотите ограничить платформу, она работает в технологическом плане, я бы использовал белый список, а не черный список.
На самом деле, я бы не сделал это технологически вообще, потому что, возможно, следующая версия Python может иметь Win32/Win64
вместо Windows
(для черных списков) и *nix
вместо Linux
(для белого -listing).
Мой совет - просто указать, что это за требования, и, если пользователь решил игнорировать это, что их проблема. Если они сообщают, что получили сообщение об ошибке "Не могу найти FHS", и они признают, что они работают в Windows, нежно указывайте им, что это не поддерживаемая конфигурация.
Возможно, ваши клиенты достаточно умны, чтобы заставить FHS работать под Windows, чтобы ваш код работал. Они вряд ли оценят, что они тогда рассмотрят произвольное ограничение вашего программного обеспечения.
Это проблема, с которой сталкиваются разработчики программного обеспечения каждый день. Даже огромные организации не могут поддерживать каждую платформу и конфигурацию там.
Попробуйте следующее:
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.
>>> 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
С помощью (платформы)
system()
Returns the system/OS name, e.g. 'Linux', 'Windows' or 'Java'.
An empty string is returned if the value cannot be determined.