Действительно ли безопасно использовать sys.platform == 'win32', проверяют 64-разрядный Python?

Обычная проверка для дифференциации между под управлением приложением 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.

43
задан bialix 27 January 2010 в 08:58
поделиться

3 ответа

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 не изменит этот ответ.

39
ответ дан 26 November 2019 в 23:06
поделиться

Оговорки для Windows/32 и Windows/64 одинаковы, поэтому они должны использовать одно и то же значение. Единственная разница будет, например, в sys.maxint и ctypes. Если вам нужно различать между 32 и 64, независимо от этого, то платформа - это лучший вариант.

2
ответ дан 26 November 2019 в 23:06
поделиться

Лично я использую platinfo для обнаружения базовой платформы.

>>> from platinfo import PlatInfo
>>> pi = PlatInfo()
>>> pi.os
'win64'
>>> pi.arch
'x64'
>>> pi.name()
'win64-x64'

Для 32-разрядных pi.name () возвращает win32-x86 .

5
ответ дан 26 November 2019 в 23:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: