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_inputhwmon0为实际存在的目录,比如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
相关产品推荐
相关产品推荐

