在Python中获取处理器信息

问题描述 投票:0回答:11

使用Python有什么办法可以找出处理器信息...(我需要名字)

我需要运行解释器的处理器的名称。我检查了sys模块,但没有这个功能。

如果需要,我也可以使用外部库。

python processor
11个回答
39
投票

platform.processor() 函数以字符串形式返回处理器名称。

>>> import platform
>>> platform.processor()
'Intel64 Family 6 Model 23 Stepping 6, GenuineIntel'

29
投票

这里有一段黑客代码,应该能够在我有合理经验的三个平台上一致地找到处理器的名称。

import os, platform, subprocess, re

def get_processor_name():
    if platform.system() == "Windows":
        return platform.processor()
    elif platform.system() == "Darwin":
        os.environ['PATH'] = os.environ['PATH'] + os.pathsep + '/usr/sbin'
        command ="sysctl -n machdep.cpu.brand_string"
        return subprocess.check_output(command).strip()
    elif platform.system() == "Linux":
        command = "cat /proc/cpuinfo"
        all_info = subprocess.check_output(command, shell=True).decode().strip()
        for line in all_info.split("\n"):
            if "model name" in line:
                return re.sub( ".*model name.*:", "", line,1)
    return ""

26
投票

要获得易于使用的包,您可以使用

cpuinfo

安装为

pip install py-cpuinfo

从命令行使用:

python -m cpuinfo

代码:

import cpuinfo
cpuinfo.get_cpu_info()['brand']

20
投票

这里有一些代码:

https://github.com/pydata/numexpr/blob/master/numexpr/cpuinfo.py

它非常依赖于操作系统,因此有很多 if 分支。但它确实可以发挥所有 CPU 功能。

$ python cpuinfo.py 
CPU information: getNCPUs=2 has_mmx has_sse has_sse2 is_64bit is_Intel is_Pentium is_PentiumIV

对于 Linux,它会查找 /proc/cpuinfo 并尝试使用 uname。对于 Windows,它看起来像使用注册表。

要使用此模块获取[第一个]处理器名称:

>>> import cpuinfo
>>> cpuinfo.cpu.info[0]['model name']
'Intel(R) Pentium(R) 4 CPU 3.60GHz'

如果它有多个处理器,那么 cpuinfo.cpu.info 的元素将有它们的名称。不过,我认为我从未见过具有两个不同处理器的 PC(自 80 年代以来就没有见过,当时您可以为 6502 CPU BBC Micro 配备 Z80 协处理器...)


16
投票

我在这里尝试了各种解决方案。

cat /proc/cpuinf
为多核机器提供了大量的输出,很多页长,
platform.processor()
似乎给你的输出很少。使用 Linux 和 Python 3,以下内容返回大约二十行的非常有用的摘要:

import subprocess
print((subprocess.check_output("lscpu", shell=True).strip()).decode())

6
投票

工作代码(如果这对您不起作用,请告诉我):

import platform, subprocess

def get_processor_info():
    if platform.system() == "Windows":
        return platform.processor()
    elif platform.system() == "Darwin":
        return subprocess.check_output(['/usr/sbin/sysctl', "-n", "machdep.cpu.brand_string"]).strip()
    elif platform.system() == "Linux":
        command = "cat /proc/cpuinfo"
        return subprocess.check_output(command, shell=True).strip()
    return ""

4
投票

Windows 的 if-cases,即 platform.processor() 仅给出处理器的描述或系列名称,例如 Intel64 家族 6 型号 60 步进 3。

我用过:

  if platform.system() == "Windows":
        family = platform.processor()
        name = subprocess.check_output(["wmic","cpu","get", "name"]).strip().split("\n")[1]
        return ' '.join([name, family])

获取实际的 cpu 模型,该模型与 Darwin 和 Linux 的 if 块的输出相同,例如 Intel(R) Core(TM) i7-4790K CPU @ 4.00GHz Intel64 Family 6 Model 60 Stepping 3,正版Intel


4
投票

[答案]:这个效果最好

 import cpuinfo
 cpuinfo.get_cpu_info()['brand_raw'] # get only the brand name

 import cpuinfo
 cpuinfo.get_cpu_info()

获取有关CPU的所有信息

{'python_version': '3.7.6.final.0 (64 bit)',
 'cpuinfo_version': [7, 0, 0],
 'cpuinfo_version_string': '7.0.0',
 'arch': 'X86_64',
 'bits': 64,
 'count': 2,
 'arch_string_raw': 'x86_64',
 'vendor_id_raw': 'GenuineIntel',
 'brand_raw': 'Intel(R) Xeon(R) CPU @ 2.00GHz',
 'hz_advertised_friendly': '2.0000 GHz',
 'hz_actual_friendly': '2.0002 GHz',
 'hz_advertised': [2000000000, 0],
 'hz_actual': [2000176000, 0],
 'stepping': 3,
 'model': 85,
 'family': 6,
 'flags': ['3dnowprefetch',
  'abm',
  'adx', ...more

2
投票

看起来@Spacedman 答案中缺少的脚本在这里:

https://github.com/pydata/numexpr/blob/master/numexpr/cpuinfo.py

它已打补丁以与 Python 3 一起使用。

>python cpuinfo.py
CPU information: CPUInfoBase__get_nbits=32 getNCPUs=2 has_mmx is_32bit is_Intel is_i686

数据的结构确实取决于操作系统,在Windows上它看起来像这样:

>python -c "import cpuinfo, pprint; pprint.pprint(cpuinfo.cpu.info[0])"
{'Component Information': '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00',
 'Configuration Data': '\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00',
 'Family': 6,
 'FeatureSet': 2687451135L,
 'Identifier': u'x86 Family 6 Model 23 Stepping 10',
 'Model': 23,
 'Platform ID': 128,
 'Previous Update Signature': '\x00\x00\x00\x00\x0c\n\x00\x00',
 'Processor': '0',
 'ProcessorNameString': u'Intel(R) Core(TM)2 Duo CPU     P8600  @ 2.40GHz',
 'Stepping': 10,
 'Update Signature': '\x00\x00\x00\x00\x0c\n\x00\x00',
 'Update Status': 2,
 'VendorIdentifier': u'GenuineIntel',
 '~MHz': 2394}

在 Linux 上则不同:

# python -c "import cpuinfo, pprint; pprint.pprint(cpuinfo.cpu.info[0])"
{'address sizes': '36 bits physical, 48 bits virtual',
 'apicid': '0',
 'bogomips': '6424.11',
 'bugs': '',
 'cache size': '2048 KB',
 'cache_alignment': '128',
 'clflush size': '64',
 'core id': '0',
 'cpu MHz': '2800.000',
 'cpu cores': '2',
 'cpu family': '15',
 'cpuid level': '6',
 'flags': 'fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx lm const
ant_tsc pebs bts nopl pni dtes64 monitor ds_cpl est cid cx16 xtpr pdcm lahf_lm',
 'fpu': 'yes',
 'fpu_exception': 'yes',
 'initial apicid': '0',
 'microcode': '0xb',
 'model': '6',
 'model name': 'Intel(R) Pentium(R) D CPU 3.20GHz',
 'physical id': '0',
 'power management': '',
 'processor': '0',
 'siblings': '2',
 'stepping': '5',
 'uname_m': 'x86_64',
 'vendor_id': 'GenuineIntel',
 'wp': 'yes'}

0
投票

对于Linux,并且向后兼容Python(不是每个人都有

cpuinfo
),可以直接通过
/proc/cpuinfo
进行解析。要获得处理器速度,请尝试:

# Take any float trailing "MHz", some whitespace, and a colon.
speeds = re.search("MHz\s*: (\d+\.?\d*)", cpuinfo_content)

注意必须使用

\s
来表示空格...
/proc/cpuinfo
实际上有制表符,我花了几个小时使用
sed
直到我想出:

sed -rn 's/cpu MHz[ \t]*: ([0-9]+\.?[0-9]*)/\1/gp' /proc/cpuinfo

我缺少

\t
,这让我发疯,因为我要么匹配整个文件,要么什么都不匹配。

对您需要的其他字段尝试类似的正则表达式:

# Take any string after the specified field name and colon.
re.search("field name\s*: (.+)", cpuinfo_content)  

0
投票

platorm.machine()
仅适用于 ISA

https://docs.python.org/3/library/platform.html#platform.machine也很有用:

import platform
print(platform.machine())

可能的输出:

x86_64

在 Python 3.11、Ubuntu 23.04、Lenovo ThinkPad P51 上测试。

CPU 数量

参见:如何使用python找出CPU的数量

© www.soinside.com 2019 - 2024. All rights reserved.