Ned*_*ily 378
更新:一种方法是看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)
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
顺便说一下,你可能很想用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
Run Code Online (Sandbox Code Playgroud)
小智 237
在终端/命令行中启动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.适用于我的特定设置.
Chr*_*heD 178
基本上是马修马歇尔答案的变体(来自std.library的结构):
import struct
print struct.calcsize("P") * 8
Run Code Online (Sandbox Code Playgroud)
Mat*_*all 73
尝试使用ctypes来获取void指针的大小:
import ctypes
print ctypes.sizeof(ctypes.c_voidp)
Run Code Online (Sandbox Code Playgroud)
32位为4或64位为8.
abe*_*312 45
打开python控制台:
import platform
platform.architecture()[0]
Run Code Online (Sandbox Code Playgroud)
它应根据您的平台显示"64位"或"32位".
或者(在OS X二进制文件的情况下):
import sys
sys.maxsize > 2**32
# it should display True in case of 64bit and False in case of 32bit
Run Code Online (Sandbox Code Playgroud)
小智 17
在我的Centos Linux系统上,我做了以下工作:
1)启动了Python解释器(我使用的是2.6.6)
2)运行以下代码:
import platform
print(platform.architecture())
Run Code Online (Sandbox Code Playgroud)
它给了我
(64bit, 'ELF')
Run Code Online (Sandbox Code Playgroud)
小智 12
对于 32 位,它将返回 32,对于 64 位,它将返回 64
import struct
print(struct.calcsize("P") * 8)
Run Code Online (Sandbox Code Playgroud)
Cri*_*ati 10
把一切都分组......
考虑到:
我将使用Python3和Python2在所有3个平台上举例说明.
0x100000000(2 ** 32)进行比较:64位更大,32 位更小:
Run Code Online (Sandbox Code Playgroud)>>> import sys >>> "Python {0:s} on {1: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)
Run Code Online (Sandbox Code Playgroud)>>> import sys >>> "Python {0:s} on {1: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)
Run Code Online (Sandbox Code Playgroud)>>> import sys >>> "Python {0:s} on {1: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)
Run Code Online (Sandbox Code Playgroud)>>> import sys >>> "Python {0:s} on {1: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)
Run Code Online (Sandbox Code Playgroud)>>> import sys >>> "Python {0:s} on {1: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*)):
Run Code Online (Sandbox Code Playgroud)>>> import struct >>> struct.calcsize("P") * 8 64
Run Code Online (Sandbox Code Playgroud)>>> import struct >>> struct.calcsize("P") * 8 64
Run Code Online (Sandbox Code Playgroud)>>> import struct >>> struct.calcsize("P") * 8 32
Run Code Online (Sandbox Code Playgroud)>>> import struct >>> struct.calcsize("P") * 8 64
Run Code Online (Sandbox Code Playgroud)>>> import struct >>> struct.calcsize("P") * 8 32
sizeof(void*))的大小.作为一个注释,ctypes使用#2.(不一定是为了这个任务)通过"$ {PYTHON_SRC_DIR}/Lib/ctypes/__ init__.py"(第15行左右):
Run Code Online (Sandbox Code Playgroud)>>> import ctypes >>> ctypes.sizeof(ctypes.c_void_p) * 8 64
Run Code Online (Sandbox Code Playgroud)>>> import ctypes >>> ctypes.sizeof(ctypes.c_void_p) * 8 64
Run Code Online (Sandbox Code Playgroud)>>> import ctypes >>> ctypes.sizeof(ctypes.c_void_p) * 8 32
Run Code Online (Sandbox Code Playgroud)>>> import ctypes >>> ctypes.sizeof(ctypes.c_void_p) * 8 64
Run Code Online (Sandbox Code Playgroud)>>> import ctypes >>> ctypes.sizeof(ctypes.c_void_p) * 8 32
Run Code Online (Sandbox Code Playgroud)>>> import platform >>> platform.architecture() ('64bit', '')
Run Code Online (Sandbox Code Playgroud)>>> import platform >>> platform.architecture() ('64bit', 'ELF')
Run Code Online (Sandbox Code Playgroud)>>> import platform >>> platform.architecture() ('32bit', 'ELF')
Run Code Online (Sandbox Code Playgroud)>>> import platform >>> platform.architecture() ('64bit', 'WindowsPE')
Run Code Online (Sandbox Code Playgroud)>>> import platform >>> platform.architecture() ('32bit', 'WindowsPE')
Run Code Online (Sandbox Code Playgroud)>>> import os >>> os.system("file {0:s}".format(os.path.realpath(sys.executable))) /opt/OPSWbuildtools/2.0.6/bin/python2.7.global: Mach-O 64-bit executable x86_64
Run Code Online (Sandbox Code Playgroud)>>> import os >>> os.system("file {0: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
Run Code Online (Sandbox Code Playgroud)>>> import os >>> os.system("file {0: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
Run Code Online (Sandbox Code Playgroud)>>> import os >>> os.environ["PROCESSOR_ARCHITECTURE"] 'AMD64'
Run Code Online (Sandbox Code Playgroud)>>> import os >>> os.environ["PROCESSOR_ARCHITECTURE"] 'x86'
注意:在Mac OS X(可能还有其他平台)上,可执行文件可能是包含多个体系结构的通用文件.
要获得当前解释器的"64位",查询sys.maxsize属性更可靠:
import sys
is_64bits = sys.maxsize > 2**32
Run Code Online (Sandbox Code Playgroud)
在Windows 10 上
打开 cmd 终端并通过键入 >python 启动 python 解释器,如下图所示
如果开始时的解释器信息包含AMD64,则为64 位,否则为 32 位。
struct.calcsize("P")返回存储单个指针所需的字节大小.在32位系统上,它将返回4个字节.在64位系统上,它将返回8个字节.
因此,32如果您正在运行32位python并且64运行64 位python,则会返回以下内容:
Python 2
import struct;print struct.calcsize("P") * 8
Run Code Online (Sandbox Code Playgroud)
Python 3
import struct;print(struct.calcsize("P") * 8)
Run Code Online (Sandbox Code Playgroud)
import sys
n_bits = 32 << bool(sys.maxsize >> 32)
Run Code Online (Sandbox Code Playgroud)
n_bits 将有 32 位或 64 位。
| 归档时间: |
|
| 查看次数: |
302494 次 |
| 最近记录: |