540 Stimmen

Wie kann ich feststellen, ob meine Python-Shell in 32bit oder 64bit ausgeführt wird?

Ich benötige eine Möglichkeit, aus der Shell heraus zu erkennen, in welchem Modus sich die Shell befindet.

Ich bin zwar in erster Linie ein OS X-Benutzer, aber ich wäre auch an Informationen über andere Plattformen interessiert.

Ich habe versucht, mir die Plattform Modul, aber es scheint nur über "über die Bit-Architektur und das Verknüpfungsformat, das für die ausführbare Datei verwendet wird" zu informieren: die Binärdatei wird jedoch als 64bit kompiliert (ich verwende OS X 10.6), also scheint es immer 64bit zu melden, obwohl ich die Methoden hier beschrieben um den 32bit-Modus zu erzwingen).

35voto

rekabbnad Punkte 349

Auf meinem Centos-Linux-System habe ich Folgendes getan:

1) Starten Sie den Python-Interpreter (ich verwende 2.6.6)
2) Führen Sie den folgenden Code aus:

import platform
print(platform.architecture())

und es gab mir

(64bit, 'ELF')

20voto

CristiFati Punkte 32139

Alles gruppieren...

Wenn man das bedenkt:

  • Die Frage wird gestellt für OSX (Ich habe eine alte (und kaputte) VM mit einer alten Python Version)
  • Mein Hauptanliegen ist Gewinnen Sie
  • Ich habe nur die 32bit Version installiert auf Gewinnen Sie (und ich habe eine "verkrüppelte" auf Lnx )

Ich werde auf allen 3 Plattformen ein Beispiel geben, indem ich Python 3 y Python 2 .

  1. Siehe [Python 3.Docs]: sys. maxsize Wert - vergleichen Sie ihn mit 0x100000000 ( 2 ** 32 ): größer für 64bit , kleiner für 32bit :

    • OSX 9 x64 :

      • Python 2.7.10 x64 :

        >>> import sys
        >>> "Python {0:s} on {1:s}".format(sys.version, sys.platform)
        'Python 2.7.10 (default, Oct 14 2015, 05:51:29) \n[GCC 4.8.2] on darwin'
        >>> hex(sys.maxsize), sys.maxsize > 0x100000000
        ('0x7fffffffffffffff', True)
    • Ubuntu 16 x64 :

      • Python 3.5.2 x64 :

        >>> import sys
        >>> "Python {0:s} on {1:s}".format(sys.version, sys.platform)
        'Python 3.5.2 (default, Nov 23 2017, 16:37:01) \n[GCC 5.4.0 20160609] on linux'
        >>> hex(sys.maxsize), sys.maxsize > 0x100000000
        ('0x7fffffffffffffff', True)
      • Python 3.6.4 x86 :

        >>> import sys
        >>> "Python {0:s} on {1:s}".format(sys.version, sys.platform)
        'Python 3.6.4 (default, Apr 25 2018, 23:55:56) \n[GCC 5.4.0 20160609] on linux'
        >>> hex(sys.maxsize), sys.maxsize > 0x100000000
        ('0x7fffffff', False)
    • Win 10 x64 :

      • Python 3.5.4 x64 :

        >>> import sys
        >>> "Python {0:s} on {1:s}".format(sys.version, sys.platform)
        'Python 3.5.4 (v3.5.4:3f56838, Aug  8 2017, 02:17:05) [MSC v.1900 64 bit (AMD64)] on win32'
        >>> hex(sys.maxsize), sys.maxsize > 0x100000000
        ('0x7fffffffffffffff', True)
      • Python 3.6.2 x86 :

        >>> import sys
        >>> "Python {0:s} on {1:s}".format(sys.version, sys.platform)
        'Python 3.6.2 (v3.6.2:5fd33b5, Jul  8 2017, 04:14:34) [MSC v.1900 32 bit (Intel)] on win32'
        >>> hex(sys.maxsize), sys.maxsize > 0x100000000
        ('0x7fffffff', False)
  2. Utilice [Python 3.Docs]: struct. berechnen. ( Format ) um die durch das (Zeiger-)Format erzeugte Objektgröße zu bestimmen. Mit anderen Worten, bestimmt die Zeigergröße ( sizeof(void*) ):

    • OSX 9 x64 :

      • Python 2.7.10 x64 :

        >>> import struct
        >>> struct.calcsize("P") * 8
        64
    • Ubuntu 16 x64 :

      • Python 3.5.2 x64 :

        >>> import struct
        >>> struct.calcsize("P") * 8
        64
      • Python 3.6.4 x86 :

        >>> import struct
        >>> struct.calcsize("P") * 8
        32
    • Win 10 x64 :

      • Python 3.5.4 x64 :

        >>> import struct
        >>> struct.calcsize("P") * 8
        64
      • Python 3.6.2 x86 :

        >>> import struct
        >>> struct.calcsize("P") * 8
        32
  3. Utilice [Python 3.Docs]: ctypes - Eine Bibliothek mit Fremdfunktionen für Python . Es läuft auch darauf hinaus, die Größe eines Zeigers zu bestimmen ( sizeof(void*) ). Als Anmerkung, ctypes verwendet #2. (nicht unbedingt für diese Aufgabe) über "${PYTHON_SRC_DIR}/Lib/ctypes/__init__.py" (um Zeile #15 ):

    • OSX 9 x64 :

      • Python 2.7.10 x64 :

        >>> import ctypes
        >>> ctypes.sizeof(ctypes.c_void_p) * 8
        64
    • Ubuntu 16 x64 :

      • Python 3.5.2 x64 :

        >>> import ctypes
        >>> ctypes.sizeof(ctypes.c_void_p) * 8
        64
      • Python 3.6.4 x86 :

        >>> import ctypes
        >>> ctypes.sizeof(ctypes.c_void_p) * 8
        32
    • Win 10 x64 :

      • Python 3.5.4 x64 :

        >>> import ctypes
        >>> ctypes.sizeof(ctypes.c_void_p) * 8
        64
      • Python 3.6.2 x86 :

        >>> import ctypes
        >>> ctypes.sizeof(ctypes.c_void_p) * 8
        32
  4. [Python 3.Docs]: Plattform. Architektur ( executable=sys.executable, bits='', linkage='' ) !!! NICHT zuverlässig auf OSX !!! aufgrund einer Multiarch-Ausführung (oder .dylib ) (in einigen Fällen wird das Format #2. ):

    • OSX 9 x64 :

      • Python 2.7.10 x64 :

        >>> import platform
        >>> platform.architecture()
        ('64bit', '')
    • Ubuntu 16 x64 :

      • Python 3.5.2 x64 :

        >>> import platform
        >>> platform.architecture()
        ('64bit', 'ELF')
      • Python 3.6.4 x86 :

        >>> import platform
        >>> platform.architecture()
        ('32bit', 'ELF')
    • Win 10 x64 :

      • Python 3.5.4 x64 :

        >>> import platform
        >>> platform.architecture()
        ('64bit', 'WindowsPE')
      • Python 3.6.2 x86 :

        >>> import platform
        >>> platform.architecture()
        ('32bit', 'WindowsPE')
  5. Lahme Abhilfe ( gainarie ) - Aufrufen eines externen Befehls ( [man7]: FILE(1) ) über [Python 3.Docs]: os. System ( commande ) . Die Grenzen der #4. anwenden (manchmal funktioniert es auch gar nicht):

    • OSX 9 x64 :

      • Python 2.7.10 x64 :

        >>> import os
        >>> os.system("file {0:s}".format(os.path.realpath(sys.executable)))
        /opt/OPSWbuildtools/2.0.6/bin/python2.7.global: Mach-O 64-bit executable x86_64
    • Ubuntu 16 x64 :

      • Python 3.5.2 x64 :

        >>> import os
        >>> os.system("file {0:s}".format(os.path.realpath(sys.executable)))
        /usr/bin/python3.5: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=59a8ef36ca241df24686952480966d7bc0d7c6ea, stripped
      • Python 3.6.4 x86 :

        >>> import os
        >>> os.system("file {0:s}".format(os.path.realpath(sys.executable)))
        /home/cfati/Work/Dev/Python-3.6.4/python: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=5c3d4eeadbd13cd91445d08f90722767b0747de2, not stripped
    • Win 10 x64 :

      • Datei Nutzen nicht vorhanden ist, gibt es andere 3 rd Party-Tools, die verwendet werden können, auf die ich aber nicht bestehen werde

Gewinnen Sie spezifisch:

  1. Prüfen Sie die Umgebungsvariablen (z. B. %PROZESSOR_ARCHITEKTUR%. (oder andere)) über [Python 3.Docs]: os. Umgebung :

    • Win 10 x64 :

      • Python 3.5.4 x64 :

        >>> import os
        >>> os.environ["PROCESSOR_ARCHITECTURE"]
        'AMD64'
      • Python 3.6.2 x86 :

        >>> import os
        >>> os.environ["PROCESSOR_ARCHITECTURE"]
        'x86'
  2. [Python 3.Docs]: sys. Version (auch angezeigt in der 1 st Zeile beim Starten des Interpreters)

    • Siehe #1.

17voto

Peter Hosey Punkte 94684

Eine nicht-programmatische Lösung finden Sie in der Aktivitätsanzeige. Dort wird die Architektur von 64-Bit-Prozessen als "Intel (64-Bit)" aufgeführt.

14voto

DevLoverUmar Punkte 7868

Auf Windows 10

Öffnen Sie das cmd-Terminal und starten Sie den Python-Interpreter durch Eingabe von >python, wie in der folgenden Abbildung gezeigt

Img

Wenn die Interpreterinfo beim Start Folgendes enthält AMD64 ist es 64-Bit, ansonsten 32-Bit.

14voto

Byte legion Punkte 151

Für 32 Bit wird 32 und für 64 Bit wird 64 zurückgegeben

import struct
print(struct.calcsize("P") * 8)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X