2017-02-06 148 views
2

在Windows下,我正在运行一个32位python.exe。我需要知道OS/CPU是64位还是32位。Python:如何知道OS/CPU是64位

我的机器运行Windows7 64位。

经过this post,并试图运行此Python脚本:

import ctypes; print(32 if ctypes.sizeof(ctypes.c_voidp)==4 else 64, 'bit CPU') 
import sys; print("%x" % sys.maxsize, sys.maxsize > 2**32) 
import struct; print(8 * struct.calcsize("P")) 
import platform; print(platform.architecture()[0]) 
print(platform.machine()) 

它输出:

32 bit CPU 
7fffffff False 
32 
32bit 
AMD64 

没有提出从引用的帖子真的让你的CPU/OS的架构信息。他们都报告32位,因为我正在运行一个Python 32位二进制文​​件。

如何以便携的方式确定CPU/OS是32位还是64位(可以在platform.machine()中使用64位字符串的loopu,但我怀疑这是好方法)?

+2

那么为什么'AMD64'不能告诉你这个?在32位二进制中,其他值肯定应该是32位,这是完全正常的。 “AMD64”或“x86_64”都应该告诉你CPU是64位的。 –

+0

@MartijnPieters:是的,它告诉我,但正在做'is_64 =(platform.machine()。find(“64”)!= -1)'一种便携的方式来检查?这将在64位的所有CPU/OS上运行吗? – jpo38

+0

它适用于我尝试的3种不同架构(其中一种是VM)。 –

回答

1

您正在查询的大部分信息由解释程序的字数决定,而不是CPU。

只有platform.machine()忽略此信息;它取自系统uname -m的数据,这是推荐的命令,用于确定您的系统是否为64位的LinuxOS X,并且Windows提供完全相同的信息(Python在所有情况下都使用C uname()函数)。

在该字符串

无论是测试64,或建立一套可接受值:

'64' in platform.machine() 

platform.machine() in {'x86_64', 'AMD64'} 
相关问题