如何确定我的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)