Python 跨平台获取 CPU 型号:py-cpuinfo / wmic / /proc/cpuinfo 全方案

问题背景

需要在 Python 代码里获取完整的 CPU 型号字符串,例如:

Intel(R) Xeon(R) CPU E5-2680 v4 @ 2.40GHz

不同平台读取方式不同,以下是各方案的完整写法。

推荐:py-cpuinfo(跨平台)

pip install py-cpuinfo
from cpuinfo import get_cpu_info

info = get_cpu_info()
print(info["brand_raw"])
# Intel(R) Xeon(R) CPU E5-2680 v4 @ 2.40GHz

brand_raw 是最原始、最完整的 CPU 商品名称。该库会自动根据平台选择 Windows 注册表、Linux /proc/cpuinfo、macOS sysctl 等数据源,兼容性最好,适合写跨平台工具。

Windows(无第三方库)

方案一:wmic

import subprocess

cpu = subprocess.check_output(
    "wmic cpu get name",
    shell=True
).decode("gbk").split("\n")[1].strip()

print(cpu)

注意编码用 gbk,Windows 中文环境下 cmd 输出默认是 GBK。

方案二:PowerShell CimInstance

import subprocess

cpu = subprocess.check_output(
    ["powershell", "(Get-CimInstance Win32_Processor).Name"]
).decode("utf-8").strip()

print(cpu)

PowerShell 输出是 UTF-8,更可靠,推荐用这个。

Linux

直接读 /proc/cpuinfo

with open("/proc/cpuinfo") as f:
    for line in f:
        if line.startswith("model name"):
            print(line.split(":", 1)[1].strip())
            break

多核机器 /proc/cpuinfo 会重复每个核的信息,读第一条就够了。

macOS

import subprocess

cpu = subprocess.check_output(
    ["sysctl", "-n", "machdep.cpu.brand_string"]
).decode().strip()

print(cpu)

不推荐:platform.processor()

import platform

print(platform.processor())
# 很多系统输出:Intel64 Family 6 Model 79 Stepping 1, GenuineIntel
# 或者直接为空字符串

platform.processor() 不返回 CPU 商品名称,在 Linux 上通常是架构描述或空串,不适合用来显示给用户看的型号。

跨平台封装

from cpuinfo import get_cpu_info

def get_cpu_name() -> str:
    return get_cpu_info()["brand_raw"]

py-cpuinfo 一行搞定,不需要为三个平台分别写判断逻辑。