在Python中获取处理器信息

use*_*312 27 python processor

有没有办法找到处理器信息...(我需要名字)

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

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

use*_*312 28

所述platform.processor()函数返回处理器名称为字符串.

>>> import platform
>>> platform.processor()
'Intel64 Family 6 Model 23 Stepping 6, GenuineIntel'
Run Code Online (Sandbox Code Playgroud)

  • 请注意,许多平台不提供此信息或只是返回与 machine() 相同的值。NetBSD 是这样做的:我有这个问题。我需要知道我是否在 intel 或 amd 上运行,因为我的脚本正在生成用于编译软件的配置设置,并且根据 intel/amd 我想设置 xHost 或 msse3 选项。 (4认同)
  • @JohnLaRooy 我在 Ubuntu 18.04 上运行时只得到一个“x86_64”字符串。 (4认同)
  • @Spacedman:“如果无法确定值,则返回空字符串。” 有同样的问题。 (3认同)
  • 任何人都可以说这是否是平台无关的输出.即.它是否总是为windows/linux/osx上的相同CPU提供完全相同的输出? (2认同)

Spa*_*man 12

这里有一些代码:

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

它非常依赖操作系统,所以有很多if-branches.但它确实能够解决所有CPU功能.

$ python cpuinfo.py 
CPU information: getNCPUs=2 has_mmx has_sse has_sse2 is_64bit is_Intel is_Pentium is_PentiumIV
Run Code Online (Sandbox Code Playgroud)

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

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

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

如果它有多个处理器,那么cpuinfo.cpu.info的元素将具有它们的名称.我不认为我曾经见过具有两种不同处理器的PC(不是自80年代以来,你可以为你的6502 CPU BBC Micro获得Z80协处理器......)

  • 该链接似乎已损坏,在该网站上搜索cpuinfo会带来很多结果.你能把项目名称/链接放到代码中吗? (7认同)

dbn*_*dbn 12

这是一个hackish的代码,应该始终在我有任何合理经验的三个平台上找到处理器的名称.

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).strip()
        for line in all_info.split("\n"):
            if "model name" in line:
                return re.sub( ".*model name.*:", "", line,1)
    return ""
Run Code Online (Sandbox Code Playgroud)


Phi*_* L. 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 ""
Run Code Online (Sandbox Code Playgroud)


car*_*mom 6

我在这里尝试了各种解决方案.cat /proc/cpuinf为多核机器提供了大量的输出,多页长,platform.processor()似乎给你很少.使用Linux和Python 3,以下内容返回了大约20行的非常有用的摘要:

import subprocess
print((subprocess.check_output("lscpu", shell=True).strip()).decode())
Run Code Online (Sandbox Code Playgroud)


ser*_*inc 6

对于易于使用的软件包,可以使用cpuinfo

安装为 pip install py-cpuinfo

从命令行使用: python -m cpuinfo

码:

import cpuinfo
cpuinfo.get_cpu_info()['brand']
Run Code Online (Sandbox Code Playgroud)

  • 这在 MacOS 上提供了比 platform.processor() 更好的 CPU 信息 (4认同)