我需要一种方法来告诉shell在shell中的模式。
我试过看platform模块,但似乎只是告诉你“关于用于可执行文件的位体系结构和链接格式”:二进制文件编译为64位虽然(我是在OS X 10.6上运行)所以它似乎总是报告64位,即使我使用方法described here来强制32位模式。)
答案 0 :(得分:362)
更新:
一种方法是查看记录为here的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)
在Python 2.6中引入了 sys.maxsize
。如果您需要对旧系统进行测试,这个稍微复杂的测试应该适用于所有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()
。不幸的是,其结果并不总是可靠的particularly in the case of OS X universal binaries。
$ 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
答案 1 :(得分:224)
在终端/命令行中启动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。
适用于我的特定设置。
答案 2 :(得分:168)
基本上是马修马歇尔答案的变体(来自std.library的结构):
import struct
print struct.calcsize("P") * 8
答案 3 :(得分:70)
尝试使用ctypes获取void指针的大小:
import ctypes
print ctypes.sizeof(ctypes.c_voidp)
32位为4或64位为8。
答案 4 :(得分:40)
打开python控制台:
import platform
platform.architecture()[0]
它应该显示' 64bit'或者' 32bit'根据你的平台。
import sys
sys.maxsize > 2**32
# it should display True in case of 64bit and False in case of 32bit
答案 5 :(得分:15)
对于非程序化解决方案,请查看活动监视器。它将64位进程的体系结构列为“Intel(64位)”。
答案 6 :(得分:14)
在我的Centos Linux系统上,我执行了以下操作:
1)启动Python解释器(我使用的是2.6.6)
2)运行以下代码:
import platform
print(platform.architecture())
它给了我
(64bit, 'ELF')
答案 7 :(得分:9)
对于32位,它将返回32,对于64位,它将返回64
import struct
print(struct.calcsize("P") * 8)
答案 8 :(得分:9)
注意: 在Mac OS X(可能还有其他平台)上,可执行文件可能是包含多种体系结构的通用文件。
要获得当前解释器的“64位”,它更可靠 查询sys.maxsize属性:
import sys
is_64bits = sys.maxsize > 2**32
答案 9 :(得分:8)
将所有内容分组......
考虑到:
我将使用 Python3 和 Python2 在所有3个平台上举例说明。
0x100000000
(2 ** 32
)进行比较: 64bit 更大, 32bit 更小:
>>> import sys >>> "Python {:s} on {:s}".format(sys.version, sys.platform) 'Python 2.7.10 (default, Oct 14 2015, 05:51:29) \n[GCC 4.8.2] on darwin' >>> hex(sys.maxsize), sys.maxsize > 0x100000000 ('0x7fffffffffffffff', True)
>>> import sys >>> "Python {:s} on {:s}".format(sys.version, sys.platform) 'Python 3.5.2 (default, Nov 23 2017, 16:37:01) \n[GCC 5.4.0 20160609] on linux' >>> hex(sys.maxsize), sys.maxsize > 0x100000000 ('0x7fffffffffffffff', True)
>>> import sys >>> "Python {:s} on {:s}".format(sys.version, sys.platform) 'Python 3.6.4 (default, Apr 25 2018, 23:55:56) \n[GCC 5.4.0 20160609] on linux' >>> hex(sys.maxsize), sys.maxsize > 0x100000000 ('0x7fffffff', False)
>>> import sys >>> "Python {:s} on {:s}".format(sys.version, sys.platform) 'Python 3.5.4 (v3.5.4:3f56838, Aug 8 2017, 02:17:05) [MSC v.1900 64 bit (AMD64)] on win32' >>> hex(sys.maxsize), sys.maxsize > 0x100000000 ('0x7fffffffffffffff', True)
>>> import sys >>> "Python {:s} on {:s}".format(sys.version, sys.platform) 'Python 3.6.2 (v3.6.2:5fd33b5, Jul 8 2017, 04:14:34) [MSC v.1900 32 bit (Intel)] on win32' >>> hex(sys.maxsize), sys.maxsize > 0x100000000 ('0x7fffffff', False)
sizeof(void*)
):
>>> import struct >>> truct.calcsize("P") * 8 64
>>> import struct >>> truct.calcsize("P") * 8 64
>>> import struct >>> truct.calcsize("P") * 8 32
>>> import struct >>> truct.calcsize("P") * 8 64
>>> import struct >>> truct.calcsize("P") * 8 32
sizeof(void*)
)。请注意, ctypes 使用 #2。 (不一定是此任务)通过" $ {PYTHON_SRC_DIR} / Lib / ctypes / __ init __。py" (围绕行#15 ):
>>> import ctypes >>> ctypes.sizeof(ctypes.c_void_p) * 8 64
>>> import ctypes >>> ctypes.sizeof(ctypes.c_void_p) * 8 64
>>> import ctypes >>> ctypes.sizeof(ctypes.c_void_p) * 8 32
>>> import ctypes >>> ctypes.sizeof(ctypes.c_void_p) * 8 64
>>> import ctypes >>> ctypes.sizeof(ctypes.c_void_p) * 8 32
>>> import platform >>> platform.architecture() ('64bit', '')
>>> import platform >>> platform.architecture() ('64bit', 'ELF')
>>> import platform >>> platform.architecture() ('32bit', 'ELF')
>>> import platform >>> platform.architecture() ('64bit', 'WindowsPE')
>>> import platform >>> platform.architecture() ('32bit', 'WindowsPE')
>>> import os >>> os.system("file {:s}".format(os.path.realpath(sys.executable))) /opt/OPSWbuildtools/2.0.6/bin/python2.7.global: Mach-O 64-bit executable x86_64
>>> import os >>> os.system("file {:s}".format(os.path.realpath(sys.executable))) /usr/bin/python3.5: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=59a8ef36ca241df24686952480966d7bc0d7c6ea, stripped
>>> import os >>> os.system("file {:s}".format(os.path.realpath(sys.executable))) /home/cfati/Work/Dev/Python-3.6.4/python: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=5c3d4eeadbd13cd91445d08f90722767b0747de2, not stripped
>>> import os >>> os.environ["PROCESSOR_ARCHITECTURE"] 'AMD64'
>>> import os >>> os.environ["PROCESSOR_ARCHITECTURE"] 'x86'
答案 10 :(得分:7)
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)
答案 11 :(得分:6)
答案 12 :(得分:3)
import sys
print(sys.version)
3.5.1(v3.5.1:37a07cee5969,2015年12月6日,01:54:25)[MSC v.1900 64 bit(AMD64)]
答案 13 :(得分:3)
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后
答案 14 :(得分:3)
试试这个:
import platform
platform.architecture()
答案 15 :(得分:2)
答案 16 :(得分:1)
平台架构不是可靠的方式。 相反,我们:
$ 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)
答案 17 :(得分:1)
在命令行中执行python -VV
。它应该返回版本。
答案 18 :(得分:0)
platform.architecture()
有问题(且昂贵)。
从Py2.6开始,方便地测试sys.maxsize > 2**32
。
这是对实际(默认)指针大小的可靠测试,并且至少从Py2.3:struct.calcsize('P') == 8
开始兼容。另外:ctypes.sizeof(ctypes.c_void_p) == 8
。
注意:可以使用gcc选项-mx32
进行构建,它们是64位体系结构的应用程序,但默认使用32位指针(节省内存和速度)。 'sys.maxsize = ssize_t'可能不严格表示C指针的大小(无论如何通常为2**31 - 1
)。而且,有些系统的代码和数据的指针大小不同,需要明确区分“ 32位或64位模式”的目的是什么?