问题背景
需要在 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 一行搞定,不需要为三个平台分别写判断逻辑。
