Saya perlu cara untuk mengetahui mode apa shell dari dalam shell.
Saya sudah mencoba melihat modul platform tetapi sepertinya hanya untuk memberi tahu Anda tentang "tentang arsitektur bit dan format tautan yang digunakan untuk dieksekusi": biner dikompilasi sebagai 64bit (saya menjalankan OS X 10.6) jadi sepertinya selalu melaporkan 64bit meskipun saya menggunakan metode yang dijelaskan di sini untuk memaksa mode 32bit).
Jawaban:
Salah satu caranya adalah dengan melihat
sys.maxsize
seperti yang didokumentasikan di sini :sys.maxsize
diperkenalkan dalam Python 2.6. Jika Anda memerlukan tes untuk sistem yang lebih lama, tes yang sedikit lebih rumit ini akan bekerja pada semua rilis Python 2 dan 3:BTW, Anda mungkin tergoda untuk menggunakannya
platform.architecture()
. Sayangnya, hasilnya tidak selalu dapat diandalkan, terutama dalam kasus OS X universal binari .sumber
sys.maxsize
tes untuk Python 2.6+ danstruct
uji yang digunakan olehplatform
modul yang juga bekerja untuk versi Python 2.Saat memulai interpreter Python di terminal / baris perintah Anda juga dapat melihat baris seperti:
Python 2.7.2 (default, Jun 12 2011, 14:24:46) [MSC v.1500 64 bit (AMD64)] on win32
Di mana
[MSC v.1500 64 bit (AMD64)]
berarti Python 64-bit. Bekerja untuk pengaturan khusus saya.sumber
[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
. Saya mendapatkan misalnya('3.4.4 |Continuum Analytics, Inc.| (default, Feb 16 2016, 09:54:04) [MSC ' 'v.1600 64 bit (AMD64)]')
atau2.7.5 (default, May 15 2013, 22:43:36) [MSC v.1500 32 bit (Intel)]
Pada dasarnya varian jawaban Matthew Marshall (dengan struct dari std.library):
sumber
python -c "import struct; print(struct.calcsize('P')*8)"
Coba gunakan ctypes untuk mendapatkan ukuran dari void pointer:
Ini akan menjadi 4 untuk 32 bit atau 8 untuk 64 bit.
sumber
python -c 'import ctypes; print ctypes.sizeof(ctypes.c_voidp)'
mengembalikan 8 . Atau haruskah demikianpython -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')"
Buka konsol python:
itu harus menampilkan '64bit' atau '32bit' sesuai dengan platform Anda.
Atau ( dalam hal binari OS X ):
sumber
Untuk solusi non-programatik, lihat di Monitor Aktivitas. Ini daftar arsitektur proses 64-bit sebagai "Intel (64-bit)".
sumber
Pada sistem Centos Linux saya, saya melakukan yang berikut:
1) Memulai interpreter Python (Saya menggunakan 2.6.6)
2) Menjalankan kode berikut:
dan itu memberi saya
sumber
platform.architecture()
catatan mengatakan:sumber
Mengelompokkan semuanya ...
Mengingat bahwa:
Saya akan mencontohkan pada semua 3 platform, menggunakan Python 3 dan Python 2 .
0x100000000
(2 ** 32
): lebih besar untuk 64bit , lebih kecil untuk 32bit :sizeof(void*)
):sizeof(void*)
). Sebagai catatan, ctypes menggunakan # 2. (tidak harus untuk tugas ini) melalui "$ {PYTHON_SRC_DIR} / Lib / ctypes / __ init__.py" (sekitar baris # 15 ):Menang spesifik:
sumber
struct.calcsize("P")
mengembalikan ukuran byte yang diperlukan untuk menyimpan satu pointer. Pada sistem 32-bit, itu akan mengembalikan 4 byte. Pada sistem 64-bit, itu akan mengembalikan 8 byte.Jadi yang berikut ini akan kembali
32
jika Anda menjalankan python 32-bit dan64
jika Anda menjalankan python 64-bit:Python 2
Python 3
sumber
Lakukan
python -VV
di baris perintah. Seharusnya mengembalikan versi.sumber
setelah menekan python dalam cmd
sumber
3.5.1 (v3.5.1: 37a07cee5969, 6 Des 2015, 01:54:25) [MSC v.1900 64 bit (AMD64) ]
sumber
Berdasarkan jawaban abe32,
n_bits akan memiliki 32 atau 64 bit.
sumber
Untuk 32 bit akan mengembalikan 32 dan untuk 64 bit akan mengembalikan 64
sumber
Arsitektur Platform bukan cara yang dapat diandalkan. Sebaliknya kami:
sumber
platform.architecture()
bermasalah (dan mahal).Mudah diuji
sys.maxsize > 2**32
sejak Py2.6.Ini adalah tes yang dapat diandalkan untuk aktual (default) ukuran pointer dan kompatibel setidaknya sejak Py2.3:
struct.calcsize('P') == 8
. Juga:ctypes.sizeof(ctypes.c_void_p) == 8
.Catatan: Mungkin ada build dengan opsi gcc
-mx32
atau lebih, yang merupakan aplikasi arsitektur 64bit, tetapi gunakan pointer 32bit sebagai default (hemat memori dan kecepatan). 'sys.maxsize = ssize_t' mungkin tidak secara ketat mewakili ukuran pointer C (biasanya biasanya demikian2**31 - 1
). Dan ada sistem yang memiliki ukuran pointer berbeda untuk kode dan data dan perlu diklarifikasi apa sebenarnya tujuan membedakan "mode 32bit atau 64bit?"sumber