J'ai besoin d'un moyen de dire dans quel mode se trouve le shell depuis l'intérieur du shell.
J'ai essayé de regarder le module de plate - forme, mais il ne semble que vous parler "de l'architecture de bits et du format de liaison utilisé pour l'exécutable": le binaire est cependant compilé en 64 bits (je fonctionne sur OS X 10.6) donc il semble toujours signaler 64 bits même si j'utilise les méthodes décrites ici pour forcer le mode 32 bits).
Réponses:
Une façon consiste à regarder
sys.maxsize
comme documenté ici :sys.maxsize
a été introduit dans Python 2.6. Si vous avez besoin d'un test pour des systèmes plus anciens, ce test légèrement plus compliqué devrait fonctionner sur toutes les versions de Python 2 et 3:BTW, vous pourriez être tenté d'utiliser
platform.architecture()
pour cela. Malheureusement, ses résultats ne sont pas toujours fiables, en particulier dans le cas d'OS X binaires universels .la source
sys.maxsize
test maintenant documenté pour Python 2.6+ et lestruct
test utilisé par leplatform
module qui fonctionne également pour les anciennes versions de Python 2.Lorsque vous démarrez l'interpréteur Python dans le terminal / la ligne de commande, vous pouvez également voir une ligne comme:
Python 2.7.2 (default, Jun 12 2011, 14:24:46) [MSC v.1500 64 bit (AMD64)] on win32
Où
[MSC v.1500 64 bit (AMD64)]
signifie Python 64 bits. Fonctionne pour ma configuration particulière.la source
[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
. Je reçois par exemple('3.4.4 |Continuum Analytics, Inc.| (default, Feb 16 2016, 09:54:04) [MSC ' 'v.1600 64 bit (AMD64)]')
ou2.7.5 (default, May 15 2013, 22:43:36) [MSC v.1500 32 bit (Intel)]
Fondamentalement, une variante de la réponse de Matthew Marshall (avec struct à partir de la bibliothèque std):
la source
python -c "import struct; print(struct.calcsize('P')*8)"
Essayez d'utiliser des ctypes pour obtenir la taille d'un pointeur vide:
Ce sera 4 pour 32 bits ou 8 pour 64 bits.
la source
python -c 'import ctypes; print ctypes.sizeof(ctypes.c_voidp)'
revient 8 . Ou devrait-il en être ainsipython -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')"
Ouvrez la console python:
il devrait afficher le «64 bits» ou le «32 bits» en fonction de votre plate-forme.
Alternativement ( en cas de binaires OS X ):
la source
Pour une solution non programmatique, recherchez dans le moniteur d'activité. Il répertorie l'architecture des processus 64 bits comme «Intel (64 bits)».
la source
Sur mon système Centos Linux, j'ai fait ce qui suit:
1) Lancement de l'interpréteur Python (j'utilise 2.6.6)
2) Exécution du code suivant:
et ça m'a donné
la source
platform.architecture()
les notes disent:la source
Tout regrouper ...
Étant donné que:
Je vais illustrer sur les 3 plates-formes, en utilisant Python 3 et Python 2 .
0x100000000
(2 ** 32
): plus grande pour 64 bits , plus petite pour 32 bits :sizeof(void*)
):sizeof(void*)
). Remarque: ctypes utilise # 2. (pas nécessairement pour cette tâche) via "$ {PYTHON_SRC_DIR} / Lib / ctypes / __ init__.py" (autour de la ligne # 15 ):Gagnez spécifique:
la source
struct.calcsize("P")
renvoie la taille des octets nécessaires pour stocker un seul pointeur. Sur un système 32 bits, il retournerait 4 octets. Sur un système 64 bits, il retournerait 8 octets.Donc, ce qui suit retournerait
32
si vous exécutez du python 32 bits et64
si vous exécutez du python 64 bits:Python 2
Python 3
la source
Faites un
python -VV
dans la ligne de commande. Il devrait renvoyer la version.la source
après avoir frappé python en cmd
la source
3.5.1 (v3.5.1: 37a07cee5969, 6 décembre 2015, 01:54:25) [MSC v.1900 64 bits (AMD64) ]
la source
Basé sur la réponse d'abe32,
n_bits aura 32 ou 64 bits.
la source
Pour 32 bits, il renverra 32 et pour 64 bits, il renverra 64
la source
L'architecture de plate-forme n'est pas le moyen fiable. Au lieu de cela nous:
la source
platform.architecture()
est problématique (et cher).Idéalement pour tester
sys.maxsize > 2**32
depuis Py2.6.Ceci est un test fiable pour la taille du pointeur réelle (par défaut) et compatible au moins depuis Py2.3:
struct.calcsize('P') == 8
. En outre:ctypes.sizeof(ctypes.c_void_p) == 8
.Notes: Il peut y avoir des builds avec l'option gcc
-mx32
, qui sont des applications d'architecture 64 bits, mais utilisent des pointeurs 32 bits par défaut (économie de mémoire et de vitesse). 'sys.maxsize = ssize_t' peut ne pas représenter strictement la taille du pointeur C (c'est généralement de2**31 - 1
toute façon). Et il y avait / existe des systèmes qui ont des tailles de pointeur différentes pour le code et les données et il faut clarifier quel est exactement le but de discerner le "mode 32 bits ou 64 bits?"la source