descargar - python 64 bits
¿Es seguro usar sys.platform== ''win32'' comprobar en Python de 64 bits? (4)
Las advertencias para Windows / 32 y Windows / 64 son las mismas, por lo que deben usar el mismo valor. La única diferencia sería en, por ejemplo, sys.maxint
y ctypes
. Si necesita distinguir entre 32 y 64 independientemente de la platform
entonces platform
es su mejor opción.
La comprobación habitual para diferenciar entre ejecutar Python-application en Windows y en otros sistemas operativos (Linux por lo general) es usar condicional:
if sys.platform == ''win32'':
...
Pero me pregunto si es seguro usarlo hoy cuando Python de 64 bits se usa más ampliamente en los últimos años. ¿Realmente 32 significa 32 bits, o básicamente se refiere a Win32 API?
Si existe la posibilidad de tener un día sys.platform como ''win64'' tal vez tal condición sería más universal?
if sys.platform.startswith(''win''):
...
También hay otra forma de detectar Windows de la que soy consciente:
if os.name == ''nt'':
...
Pero realmente nunca vi en otro código el uso de este último.
¿Cuál es la mejor manera entonces?
UPD : me gustaría evitar el uso de bibliotecas adicionales si puedo. Exigir la instalación de una biblioteca adicional para verificar que no estoy trabajando en Windows puede ser molesto para los usuarios de Linux.
Personalmente utilizo platinfo para detectar la plataforma subyacente.
>>> from platinfo import PlatInfo
>>> pi = PlatInfo()
>>> pi.os
''win64''
>>> pi.arch
''x64''
>>> pi.name()
''win64-x64''
Para 32 bits, pi.name()
devuelve win32-x86
.
Tenga en cuenta que no puede usar sys.platform
o os.name
para esto en Jython:
$ jython -c "import sys, os; print sys.platform; print os.name"
java1.6.0_20
java
Creo que hay un plan en el proyecto Jython para cambiar os.name
para que informe el sistema operativo subyacente de manera similar a CPython, pero como las personas están usando os.name == ''java''
para verificar si están en Jython, este cambio no se puede hacer de la noche a la mañana. Sin embargo, ya hay os._name
en Jython 2.5.x:
$ jython -c "import os; print os._name"
posix
Personalmente tiendo a usar os.sep == ''/''
con código que necesita ejecutarse tanto en Jython como en CPython, y tanto en plataformas Windows como Unixy. Es algo feo pero funciona.
sys.platform
será win32
independientemente de la bitness del sistema subyacente de Windows, como se puede ver en PC/pyconfig.h
(de la distribución fuente de 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"
Es posible encontrar el parche original que introdujo esto en la web, que ofrece un poco más de explicación:
La pregunta principal es: Win64 se parece mucho más a Win32 que diferente de lo que el programador común de Python en general no debería tener que diferenciar en su código Python. O, al menos, lo suficiente como para que tal diferenciación por el scriptor de Python sea lo suficientemente rara como para que algún otro mecanismo proporcionado sea suficiente (incluso preferible). Actualmente la respuesta es sí. Con suerte, MS no cambiará esta respuesta.