Обычная проверка для дифференциации между под управлением приложением Python в Windows и в других Ose (Linux обычно) должна использовать условное выражение:
if sys.platform == 'win32':
...
Но интересно, действительно ли безопасно использовать сегодня, когда 64-разрядный Python более широко используется в прошлых годах? 32 действительно означает 32-разрядный, или в основном это относится к API Win32?
Если бы существует возможность иметь однажды sys.platform как 'win64', возможно, такое условие было бы более универсальным?
if sys.platform.startswith('win'):
...
Существует также другой способ обнаружить Windows I, знаю:
if os.name == 'nt':
...
Но я действительно никогда не видел в другом коде использование последнего.
Каков лучший способ тогда?
UPD: я хотел бы избегать использования дополнительных библиотек, если я могу. Требование установки дополнительной библиотеки, чтобы проверить, что я - работа не в Windows, может быть раздражающим для пользователей Linux.
sys.platform
будет Win32
Независимо от укуты базовой системы Windows, как вы можете увидеть в PC / Pyconfig.h
(из распределения источника Python 2.6):
#if defined(MS_WIN64)
/* maintain "win32" sys.platform for backward compatibility of Python code,
the Win64 API should be close enough to the Win32 API to make this
preferable */
# define PLATFORM "win32"
можно найти Оригинальный патч , который ввел это в Интернете, который предлагает немного больше объяснения:
Основной вопрос: это Win64 Гораздо больше похоже на Win32, чем отличается от этого, что общего обычного Python Programment никогда не должно делать дифференцировку в своем коде Python. Или, по крайней мере, достаточно, так что такая дифференцировка писатором Python достаточно редко встречается, чтобы какой-то другой предоставленный механизм достаточно (даже предпочтительнее). В настоящее время ответ да. Надеюсь, MS не изменит этот ответ.
Оговорки для Windows/32 и Windows/64 одинаковы, поэтому они должны использовать одно и то же значение. Единственная разница будет, например, в sys.maxint
и ctypes
. Если вам нужно различать между 32 и 64, независимо от этого, то платформа
- это лучший вариант.
Лично я использую platinfo для обнаружения базовой платформы.
>>> from platinfo import PlatInfo
>>> pi = PlatInfo()
>>> pi.os
'win64'
>>> pi.arch
'x64'
>>> pi.name()
'win64-x64'
Для 32-разрядных pi.name ()
возвращает win32-x86
.