シェル内からシェルがどのモードにあるのかを知る方法が必要です。
私は platform モジュールを見てみましたが、それは「ビットアーキテクチャと実行形式に使われるリンケージフォーマットについて」についてあなたに話すように思われるだけです:しかしバイナリは64ビットとしてコンパイルされます((私はOS X 10.6)上で走っているので、32ビットモードを強制するためにここで説明されている方法を使っていても、常に64ビットを報告するようです。
更新:一つの方法は、ここで文書化されている sys.maxsize
を見ることです :
$ python-32 -c 'import sys;print("%x" % sys.maxsize, sys.maxsize > 2**32)'
('7fffffff', False)
$ python-64 -c 'import sys;print("%x" % sys.maxsize, sys.maxsize > 2**32)'
('7fffffffffffffff', True)
sys.maxsize
はPython 2.6で導入されました。古いシステム用のテストが必要な場合は、このもう少し複雑なテストがすべてのPython 2および3リリースで機能するはずです。
$ python-32 -c 'import struct;print( 8 * struct.calcsize("P"))'
32
$ python-64 -c 'import struct;print( 8 * struct.calcsize("P"))'
64
ところで、これにはplatform.architecture()
を使いたくなるかもしれません。残念ながら、その結果は常に信頼できるわけではありません 。特にOS Xユニバーサルバイナリの場合 。
$ Arch -x86_64 /usr/bin/python2.6 -c 'import sys,platform; print platform.architecture()[0], sys.maxsize > 2**32'
64bit True
$ Arch -i386 /usr/bin/python2.6 -c 'import sys,platform; print platform.architecture()[0], sys.maxsize > 2**32'
64bit False
端末/コマンドラインでPythonインタプリタを起動すると、次のような行が表示されるかもしれません。
Python 2.7.2 (default, Jun 12 2011, 14:24:46) [MSC v.1500 64 bit (AMD64)] on win32
[MSC v.1500 64 bit (AMD64)]
は64ビットPythonを意味します。私の特定の設定で動作します。
基本的にMatthew Marshallの答えの変形(std.libraryからの構造体を使って):
import struct
print struct.calcsize("P") * 8
Voidポインタのサイズを取得するためにctypesを使ってみてください。
import ctypes
print ctypes.sizeof(ctypes.c_voidp)
32ビットの場合は4、64ビットの場合は8になります。
Pythonコンソールを開きます。
import platform
platform.architecture()[0]
プラットフォームに応じて「64ビット」または「32ビット」が表示されます。
あるいは(OS Xバイナリの場合は):
import sys
sys.maxsize > 2**32
# it should display True in case of 64bit and False in case of 32bit
プログラムではない解決方法については、アクティビティモニターを参照してください。 64ビットプロセスのアーキテクチャを「Intel(64-bit)」としてリストしています。
私のCentos Linuxシステムでは、次のことを行いました。
1)Pythonインタプリタを起動しました(私は2.6.6を使用しています)
2)次のコードを実行しました。
import platform
print(platform.architecture())
そしてそれは私に与えた
(64bit, 'ELF')
platform.architecture()
メモは次のように述べています。
注意:Mac OS X(およびおそらく他のプラットフォーム)では、実行可能ファイルは複数のアーキテクチャを含むユニバーサルファイルです。
現在のインタプリタの「64ビット」を理解するには、sys.maxsize属性を問い合わせるほうがより信頼性があります。
import sys
is_64bits = sys.maxsize > 2**32
struct.calcsize("P")
は、単一のポインタを格納するのに必要なバイト数を返します。 32ビットシステムでは、4バイトが返されます。 64ビットシステムでは、8バイトが返されます。
そのため、32ビットのPythonを実行している場合は32
を、64ビットのPythonを実行している場合は64
を返します。
Python 2
import struct;print struct.calcsize("P") * 8
Python 3
import struct;print(struct.calcsize("P") * 8)
C:\Users\xyz>python
Python 2.7.6 (default, Nov XY ..., 19:24:24) **[MSC v.1500 64 bit (AMD64)] on win
32**
Type "help", "copyright", "credits" or "license" for more information.
>>>
cmdでpythonを打った後
import sys
print(sys.version)
3.5.1(v3.5.1:37a07cee5969、2015年12月6日、01:54:25)[MSC v.190064ビット(AMD64)]
プラットフォームアーキテクチャは信頼できる方法ではありません。代わりに私たち:
$ 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)