Linux下psutil.sensors_temperatures()拿不到CPU温度,主因是coretemp等硬件监控驱动未加载;需手动modprobe或写入/etc/modules,且依赖psutil≥5.9.0;Windows原生WMI不支持,macOS需用smc工具(Apple Silicon暂不支持),跨平台必须基于运行时探测而非OS判断。

Linux下用psutil.sensors_temperatures()拿不到CPU温度?
不是代码写错了,是多数Linux发行版默认没加载硬件监控驱动。你调用psutil.sensors_temperatures()返回空字典或根本没'coretemp'键,大概率因为coretemp内核模块没加载。
- 先手动加载:
sudo modprobe coretemp,再运行Python脚本试试 - 要开机自动生效,把
coretemp写进/etc/modules(一行一个模块名) - 部分笔记本或ARM设备用的是
acpi或thinkpad_acpi,得查ls /sys/class/hwmon/下实际路径,不能硬认coretemp -
psutil5.9.0+ 才完整支持sensors_temperatures(),旧版本可能返回NotImplementedError
Windows上WMI查CPU温度总报错pywintypes.com_error
Windows本身不暴露CPU温度给标准WMI类,所谓“能查”基本靠第三方驱动(如HWiNFO、Open Hardware Monitor)注入的自定义WMI namespace,原生Win32_TemperatureProbe在绝大多数机器上是空的或返回无效值。
- 别碰
Win32_TemperatureProbe——它不靠谱,文档都写明“may not be available on all systems” - 真要用WMI,得先装HWiNFO并启用“WMI server”,然后查
root\hwinfo下的HardwareMonitor类(具体名依版本而异) - 更稳的路子是让HWiNFO后台运行,Python去读它生成的共享内存或CSV文件,比WMI少一层兼容性坑
- 注意权限:WMI查询常需管理员权限,普通用户运行Python脚本会直接
Access denied
macOS没法用psutil,只能走smc命令行工具
macOS从10.15开始禁用内核扩展,psutil彻底无法访问SMC传感器;官方也没开放API。目前唯一稳定方案是调用开源工具smc(由hwsensors项目提供),但得自己编译或用Homebrew装。
让 macOS 自动化像说话一样简单 —— 用代码控制你的 Mac,无需学习 AppleScript 系统要求 macOS 14+ (Sonoma) Python 3.9+ 需要开启:辅助功能 + 屏幕录制权限
- 装工具:
brew install hwsensors(注意不是smc单包,是整个hwsensors套件) - 查CPU温度项:
smc -r | grep TC,常见ID如TC0D(Die)、TC0P(Package),单位是摄氏度×256,需除以256 - Python里用
subprocess.run(['smc', '-r'], capture_output=True)解析输出,别用os.popen——macOS Catalina后权限收紧,容易卡住 - Apple Silicon(M1/M2)目前无公开SMC接口,
smc工具对ARM Mac无效,只能等厂商或社区新方案
跨平台脚本里怎么安全fallback?
别写“if Linux / elif Windows / else macOS”,真实环境里同一系统也可能缺驱动、少工具、权限不足。fallback逻辑必须基于探测结果,而不是OS字符串。
立即学习“Python免费学习笔记(深入)”;
- 优先试
psutil.sensors_temperatures().get('coretemp'),有就用 - 失败后检查
shutil.which('smc')或shutil.which('sensors')是否存在,再执行 - 所有外部命令调用加
timeout=3和check=False,避免卡死;解析前先看returncode和stderr - 最终没数据时,返回
None或抛自定义异常(如CPUTempUnavailableError),别硬填0或-1——监控告警会误触发
硬件监控最麻烦的从来不是代码怎么写,而是每个环节都依赖外部状态:驱动是否加载、工具是否安装、权限是否到位、芯片型号是否被支持。写一次跨平台采集,等于同时维护三套不可靠系统。别省掉每一步的探测和容错。

















