2009-12-03 17 views
73

Duplicar posible:
How do I determine if my python shell is executing in 32bit or 64bit mode?¿Cómo puedo detectar si Python se está ejecutando como una aplicación de 64 bits?

estoy haciendo algún trabajo con el registro de Windows. Dependiendo de si está ejecutando python como 32 bits o 64 bits, el valor de la clave será diferente. ¿Cómo puedo detectar si Python se está ejecutando como una aplicación de 64 bits en lugar de una aplicación de 32 bits?

Nota: No estoy interesado en detectar Windows de 32 bits/64 bits, solo la plataforma Python.

+3

la pregunta marcada como duplicada está dirigida a OSX, esta pregunta es diferente. Vota para reabrir – CharlesB

Respuesta

130
import platform 
platform.architecture() 

Desde el Python docs:

consulta el ejecutable dado (por defecto al binario intérprete de Python) para información diversa arquitectura.

devuelve una tupla (bits, acoplamiento), que contienen información acerca de la arquitectura poco y el formato de vinculación utilizado para el ejecutable. Ambos valores se devuelven como cadenas.

+4

No es confiable ... http://stackoverflow.com/a/12057504/156755 – Basic

+2

¿Alguien puede dar una actualización para 2017 por favor? Tan confuso para noobs todo eso. ¿'Sys.maxsize' es el camino correcto hoy o' platform.architecture() 'funciona de manera confiable en OS X, Win y Linux ahora? –

49

Si bien puede funcionar en algunas plataformas, tenga en cuenta que no siempre es platform.architecture una manera confiable para determinar si se está ejecutando en el pitón de 32 bits o 64 bits. En particular, en algunas compilaciones de arquitectura multi OS X, el mismo archivo ejecutable puede ejecutarse en cualquier modo, como lo demuestra el siguiente ejemplo. El enfoque multiplataforma seguro más rápido es probar sys.maxsize en Python 2.6, 2.7, Python 3.x.

$ arch -i386 /usr/local/bin/python2.7 
Python 2.7.9 (v2.7.9:648dcafa7e5f, Dec 10 2014, 10:10:46) 
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import platform, sys 
>>> platform.architecture(), sys.maxsize 
(('64bit', ''), 2147483647) 
>>> ^D 
$ arch -x86_64 /usr/local/bin/python2.7 
Python 2.7.9 (v2.7.9:648dcafa7e5f, Dec 10 2014, 10:10:46) 
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import platform, sys 
>>> platform.architecture(), sys.maxsize 
(('64bit', ''), 9223372036854775807) 
+0

Enfriar gracias por los detalles. –

+0

interesante gotcha. Aunque eso huele un poco como un error. Se supone que debe funcionar de esa manera? –

+2

Lo consideraría un error. Al observar el código en el módulo de la plataforma, parece ser un poco frágil y en este caso tiene que ver con la forma en que Apple implementó su función de selección de múltiples arcos. Estoy agregando una nota para asegurarnos de que veamos esto cuando finalice la función de selección de múltiples arcos de python.org OS X. –

Cuestiones relacionadas