Necesito una manera de saber en qué modo está el shell desde dentro del shell.
Intenté mirar el módulo de la plataforma , pero parece solo decirle "sobre la arquitectura de bits y el formato de enlace utilizado para el ejecutable": el binario se compila como 64 bits (estoy ejecutando en OS X 10.6) así que parece que siempre informa 64 bits, aunque estoy usando los métodos descritos aquí para forzar el modo 32 bits).
Respuestas:
Una forma es mirar
sys.maxsize
como se documenta aquí :sys.maxsize
fue introducido en Python 2.6. Si necesita una prueba para sistemas más antiguos, esta prueba un poco más complicada debería funcionar en todas las versiones de Python 2 y 3:Por cierto, puede ser tentado a usar
platform.architecture()
para esto. Por desgracia, sus resultados no siempre son fiables, sobre todo en el caso de los binarios universales OS X .fuente
sys.maxsize
prueba ahora documentada para Python 2.6+ y lastruct
prueba utilizada por elplatform
módulo que también funciona para versiones anteriores de Python 2.Al iniciar el intérprete de Python en la línea de terminal / comando, también puede ver una línea como:
Python 2.7.2 (default, Jun 12 2011, 14:24:46) [MSC v.1500 64 bit (AMD64)] on win32
Donde
[MSC v.1500 64 bit (AMD64)]
significa Python de 64 bits. Funciona para mi configuración particular.fuente
[MSC v.1500 64 bit (AMD64)]
Python 2.7.8 (v2.7.8:ee879c0ffa11, Jun 29, 2014, 21:07:35) [GCC 4.2.1 (Apple In. build 5666) (dot 3)] on darwin
Python 2.7.8 (default, Jul 25 2014, 14:04:36) [GCC 4.8.3] on cygwin
sys.version
. Me sale por ejemplo('3.4.4 |Continuum Analytics, Inc.| (default, Feb 16 2016, 09:54:04) [MSC ' 'v.1600 64 bit (AMD64)]')
o2.7.5 (default, May 15 2013, 22:43:36) [MSC v.1500 32 bit (Intel)]
Básicamente, una variante de la respuesta de Matthew Marshall (con una estructura de la biblioteca estándar):
fuente
python -c "import struct; print(struct.calcsize('P')*8)"
Intente usar ctypes para obtener el tamaño de un puntero vacío:
Será 4 para 32 bits u 8 para 64 bits.
fuente
python -c 'import ctypes; print ctypes.sizeof(ctypes.c_voidp)'
devuelve 8 . ¿O debería serpython -c 'import ctypes; print ctypes.sizeof(ctypes.c_voidp) * 8'
?python -c "import ctypes; print(32 if ctypes.sizeof(ctypes.c_voidp)==4 else 64, 'bit CPU')"
Consola Python abierta:
debería mostrar el '64bit' o '32bit' de acuerdo con su plataforma.
Alternativamente ( en el caso de los binarios de OS X ):
fuente
Para una solución no programática, busque en el Monitor de actividad. Enumera la arquitectura de los procesos de 64 bits como "Intel (64 bits)".
fuente
En mi sistema Centos Linux hice lo siguiente:
1) Comencé el intérprete de Python (estoy usando 2.6.6)
2) Ejecuté el siguiente código:
y me dio
fuente
platform.architecture()
las notas dicen:fuente
Agrupando todo ...
Teniendo en cuenta que:
Voy a ejemplificar en las 3 plataformas, usando Python 3 y Python 2 .
0x100000000
(2 ** 32
): mayor para 64 bits , menor para 32 bits :sizeof(void*)
):sizeof(void*)
). Como nota, ctypes usa # 2. (no necesariamente para esta tarea) a través de "$ {PYTHON_SRC_DIR} / Lib / ctypes / __ init__.py" (alrededor de la línea # 15 ):Ganancia específica:
fuente
struct.calcsize("P")
devuelve el tamaño de los bytes necesarios para almacenar un solo puntero. En un sistema de 32 bits, devolvería 4 bytes. En un sistema de 64 bits, devolvería 8 bytes.Entonces, lo siguiente volvería
32
si está ejecutando python de 32 bits y64
si está ejecutando python de 64 bits:Python 2
Python 3
fuente
Haz un
python -VV
en la línea de comando. Debería devolver la versión.fuente
después de tocar python en cmd
fuente
3.5.1 (v3.5.1: 37a07cee5969, 6 de diciembre de 2015, 01:54:25) [MSC v.1900 64 bit (AMD64) ]
fuente
Según la respuesta de abe32,
n_bits tendrá 32 o 64 bits.
fuente
Para 32 bits devolverá 32 y para 64 bits devolverá 64
fuente
La arquitectura de plataforma no es la forma confiable. En cambio nosotros:
fuente
platform.architecture()
Es problemático (y costoso).Prueba convenientemente
sys.maxsize > 2**32
desde Py2.6.Esta es una prueba fiable para la (predeterminado) Tamaño de puntero actual y compatible al menos desde Py2.3:
struct.calcsize('P') == 8
. También:ctypes.sizeof(ctypes.c_void_p) == 8
.Notas: Puede haber compilaciones con la opción gcc más
-mx32
o menos, que son aplicaciones de arquitectura de 64 bits, pero usan punteros de 32 bits de forma predeterminada (ahorro de memoria y velocidad). 'sys.maxsize = ssize_t' puede no representar estrictamente el tamaño del puntero C (generalmente de2**31 - 1
todos modos). Y hubo / hay sistemas que tienen diferentes tamaños de puntero para código y datos y es necesario aclarar cuál es exactamente el propósito de discernir el "modo de 32 bits o 64 bits".fuente