如何确定我的Python shell是在32位还是64位运行?

540 投票
17 回答
545807 浏览
提问于 2025-04-15 14:13

我怎么知道当前的shell(命令行)处于什么模式呢?

我试过查看platform这个模块,但它似乎只能告诉我“可执行文件使用的位架构和链接格式”。我的程序是编译成64位的(我在用OS X 10.6),所以它总是报告64位,即使我使用这里描述的方法来强制使用32位模式。

17 个回答

232

基本上这是对Matthew Marshall回答的一个变种(使用了标准库中的结构体):

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

当你在终端或命令行中启动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。这是针对我自己电脑的设置来说的。

501

一种方法是查看 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)

在Windows上,可以按照以下格式运行相同的命令:

python -c "import sys;print(\"%x\" % sys.maxsize, sys.maxsize > 2**32)"

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

撰写回答