1#!/usr/bin/env python3 2# -*- coding: utf-8 -*- 3 4# Copyright (c) 2009, Giampaolo Rodola'. All rights reserved. 5# Use of this source code is governed by a BSD-style license that can be 6# found in the LICENSE file. 7 8""" 9A clone of 'sensors' utility on Linux printing hardware temperatures, 10fans speed and battery info. 11 12$ python scripts/sensors.py 13asus 14 Temperatures: 15 asus 57.0°C (high=None°C, critical=None°C) 16 Fans: 17 cpu_fan 3500 RPM 18acpitz 19 Temperatures: 20 acpitz 57.0°C (high=108.0°C, critical=108.0°C) 21coretemp 22 Temperatures: 23 Physical id 0 61.0°C (high=87.0°C, critical=105.0°C) 24 Core 0 61.0°C (high=87.0°C, critical=105.0°C) 25 Core 1 59.0°C (high=87.0°C, critical=105.0°C) 26Battery: 27 charge: 84.95% 28 status: charging 29 plugged in: yes 30""" 31 32from __future__ import print_function 33 34import psutil 35 36 37def secs2hours(secs): 38 mm, ss = divmod(secs, 60) 39 hh, mm = divmod(mm, 60) 40 return "%d:%02d:%02d" % (hh, mm, ss) 41 42 43def main(): 44 if hasattr(psutil, "sensors_temperatures"): 45 temps = psutil.sensors_temperatures() 46 else: 47 temps = {} 48 if hasattr(psutil, "sensors_fans"): 49 fans = psutil.sensors_fans() 50 else: 51 fans = {} 52 if hasattr(psutil, "sensors_battery"): 53 battery = psutil.sensors_battery() 54 else: 55 battery = None 56 57 if not any((temps, fans, battery)): 58 print("can't read any temperature, fans or battery info") 59 return 60 61 names = set(list(temps.keys()) + list(fans.keys())) 62 for name in names: 63 print(name) 64 # Temperatures. 65 if name in temps: 66 print(" Temperatures:") 67 for entry in temps[name]: 68 print(" %-20s %s°C (high=%s°C, critical=%s°C)" % ( 69 entry.label or name, entry.current, entry.high, 70 entry.critical)) 71 # Fans. 72 if name in fans: 73 print(" Fans:") 74 for entry in fans[name]: 75 print(" %-20s %s RPM" % ( 76 entry.label or name, entry.current)) 77 78 # Battery. 79 if battery: 80 print("Battery:") 81 print(" charge: %s%%" % round(battery.percent, 2)) 82 if battery.power_plugged: 83 print(" status: %s" % ( 84 "charging" if battery.percent < 100 else "fully charged")) 85 print(" plugged in: yes") 86 else: 87 print(" left: %s" % secs2hours(battery.secsleft)) 88 print(" status: %s" % "discharging") 89 print(" plugged in: no") 90 91 92if __name__ == '__main__': 93 main() 94