我怎么能从壳内告诉壳处于什么模式?
我已经试着查看了平台模块,但它似乎只告诉您“用于可执行文件的位架构和链接格式”。我的二进制文件被编译为64位(我在OS X 10.6上运行),所以它似乎总是报告64位,即使我使用这里描述的方法强制32位模式。
我怎么能从壳内告诉壳处于什么模式?
我已经试着查看了平台模块,但它似乎只告诉您“用于可执行文件的位架构和链接格式”。我的二进制文件被编译为64位(我在OS X 10.6上运行),所以它似乎总是报告64位,即使我使用这里描述的方法强制32位模式。
当前回答
平台架构不是可靠的方法。 相反,我们:
$ 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)
其他回答
Platform.architecture()注释说:
注意: 在Mac OS X(也许还有其他平台)上,可执行文件可能是包含多种体系结构的通用文件。 为了获得当前解释器的“64位”,它更可靠 查询sys. xml文件。最大尺寸属性:
import sys
is_64bits = sys.maxsize > 2**32
在命令行中执行python -VV。它应该返回版本。
基本上是Matthew Marshall答案的变体(使用来自std.library的struct):
import struct
print struct.calcsize("P") * 8
在我的Centos Linux系统上,我做了以下操作: 1)启动Python解释器(我使用2.6.6) 2)运行如下代码:
import platform
print(platform.architecture())
它给了我
(64bit, 'ELF')
Platform.architecture()是有问题的(而且昂贵)。
方便地测试sys。maxsize > 2**32自Py2.6。
这是对实际(默认)指针大小的可靠测试,至少自Py2.3以来是兼容的:struct.calcsize('P') == 8。另外:ctypes.sizeof(ctypes.c_void_p) == 8。
注意:可以有gcc选项-mx32左右的构建,它们是64位架构应用程序,但默认使用32位指针(节省内存和速度)。的系统。maxsize = ssize_t'可能并不严格代表C指针的大小(通常是2**31 - 1)。有些系统对代码和数据有不同的指针大小,需要澄清的是,区分“32位模式还是64位模式”的目的究竟是什么?