You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu下psutil.sensors_temperatures()返回空{}问题求助

解决psutil.sensors_temperatures()返回空字典的问题

核心原因

psutil在Linux系统上获取温度数据完全依赖lm-sensors提供的底层sysfs接口,如果lm-sensors未检测到传感器,psutil自然返回空字典{},所以问题根源不在psutil的调用方式,而是底层传感器的检测/驱动问题。

具体排查与解决步骤

1. 重新配置并加载lm-sensors模块

即使之前运行过sensors-detect,也可能因为未确认加载模块导致传感器无法被识别:

  • 重新执行检测命令:
    sudo sensors-detect
    
  • 全程按提示选择Yes,尤其是最后询问是否自动将模块添加到/etc/modules时,务必确认。
  • 重启系统,或手动加载对应CPU的传感器模块:
    # Intel CPU
    sudo modprobe coretemp
    # AMD CPU
    sudo modprobe k10temp
    
  • 运行sensors命令验证,若输出温度数据,再重新运行你的Python脚本即可。

2. 直接检查sysfs温度节点

如果sensors仍无输出,手动查看系统底层的温度文件:

  • 进入/sys/class/hwmon/目录,遍历子目录下的temp*_input文件:
    cat /sys/class/hwmon/hwmon0/temp1_input
    
    (注意替换hwmon0为实际存在的目录,比如hwmon1等)
  • 如果文件存在且有数值(单位为千分之一摄氏度,比如45000表示45℃),说明硬件传感器正常,只是lm-sensors或psutil的识别逻辑问题;如果文件不存在或无数据,需要检查硬件驱动是否正确安装。

3. 升级psutil版本

旧版本的psutil可能对部分硬件的sysfs节点识别存在问题,升级到最新版尝试:

pip install --upgrade psutil

4. 手动读取sysfs节点的替代方案

如果以上方法都无效,可以绕过psutil,直接读取sysfs的温度文件来获取CPU温度:

import os

def get_cpu_temperature():
    hwmon_base = "/sys/class/hwmon/"
    for hwmon_dir in os.listdir(hwmon_base):
        dir_path = os.path.join(hwmon_base, hwmon_dir)
        if not os.path.isdir(dir_path):
            continue
        
        # 读取传感器名称,判断是否为CPU相关传感器
        name_path = os.path.join(dir_path, "name")
        if os.path.exists(name_path):
            with open(name_path, "r") as f:
                sensor_name = f.read().strip()
                if sensor_name not in ["coretemp", "k10temp"]:
                    continue
        
        # 查找温度输入文件
        for file_name in os.listdir(dir_path):
            if file_name.endswith("_input") and file_name.startswith("temp"):
                temp_path = os.path.join(dir_path, file_name)
                try:
                    with open(temp_path, "r") as f:
                        temp_raw = f.read().strip()
                        return int(temp_raw) / 1000  # 转换为摄氏度
                except Exception:
                    continue
    return None

# 调用示例
temp = get_cpu_temperature()
if temp is not None:
    print(f"CPU温度: {temp}℃")
else:
    print("未检测到CPU温度传感器数据")

内容的提问来源于stack exchange,提问作者lumu21

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 16:05:09