如何确定我的python shell是否在OS X上以32位或64位模式执行?

我需要一种方法来从shell中告诉shell是什么模式。

我试过看平台模块,但它似乎只是告诉你有关“位架构和用于可执行文件的链接格式”:二进制被编译为64位,虽然(我在OS X 10.6上运行)所以它似乎总是报告64位,即使我使用这里描述的方法强制32位模式)。

更新:一种方法是看这里logging的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中引入的。 如果您需要对旧系统进行testing,这个稍微复杂的testing应该适用于所有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 

当在terminal/命令行启动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。 适用于我特定的设置。

基本上马修·马歇尔的回答(从std.library的结构)的变种:

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

尝试使用ctypes来获得一个void指针的大小:

 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 

对于非编程解决scheme,请查看活动监视器。 它将64位进程的体系结构列为“Intel(64位)”。

在我的Centos Linux系统上,我做了以下操作:

1)启动Python解释器(我正在使用2.6.6)
2)运行下面的代码:

 import platform print(platform.architecture()) 

它给了我

 (64bit, 'ELF') 

platform.architecture()注释说:

注意:在Mac OS X(也可能是其他平台)上,可执行文件可能是包含多种体系结构的通用文件。

为了获得当前解释器的“64位”,查询sys.maxsize属性更加可靠:

 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.1900 64位(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)