Материал содержит описание функций модуля psutil
с примерами, которые считывают и возвращают информацию с датчиков сервера, таких как температура оборудования (процессор, HDD и т.д.), скорость вентиляторов, статус и заряд батареи.
psutil.sensors_temperatures()
показания температуры оборудования,psutil.sensors_fans()
скорость аппаратных вентиляторов,psutil.sensors_battery()
информация о состоянии батареи,psutil.sensors_temperatures(fahrenheit=False)
:Функция psutil.sensors_temperatures()
возвращает показания температуры оборудования. Каждая запись - это именованный кортеж, представляющий определенный аппаратный датчик температуры (это может быть процессор, жесткий диск или что-то еще, в зависимости от ОС и ее конфигурации).
Все температуры выражаются в градусах Цельсия, если для аргумента fahrenheit
не установлено значение True
. Если датчики не поддерживаются ОС, возвращается пустой словарь.
Пример использования psutil.sensors_temperatures()
:
>>> import psutil >>> psutil.sensors_temperatures() # {'acpitz': [shwtemp(label='', current=47.0, high=103.0, critical=103.0)], # 'asus': [shwtemp(label='', current=47.0, high=None, critical=None)], # 'coretemp': [shwtemp(label='Physical id 0', current=52.0, high=100.0, critical=100.0), # shwtemp(label='Core 0', current=45.0, high=100.0, critical=100.0), # shwtemp(label='Core 1', current=52.0, high=100.0, critical=100.0), # shwtemp(label='Core 2', current=45.0, high=100.0, critical=100.0), # shwtemp(label='Core 3', current=47.0, high=100.0, critical=100.0)]}
Доступность: Linux, FreeBSD
psutil.sensors_fans()
:Функция psutil.sensors_fans()
возвращает скорость аппаратных вентиляторов. Каждая запись представляет собой именованный кортеж, представляющий определенный вентилятор аппаратного датчика.
Скорость вентилятора выражается в RPM (оборотов в минуту). Если датчики не поддерживаются ОС, возвращается пустой словарь.
Пример использования psutil.sensors_fans()
:
>>> import psutil >>> psutil.sensors_fans() # {'asus': [sfan(label='cpu_fan', current=3200)]}
Доступность: Linux
psutil.sensors_battery()
:Функция psutil.sensors_battery()
возвращает информацию о состоянии батареи в виде именованного кортежа, включая следующие значения. Если батарея не установлена или метрики не могут быть определены, возвращается None
.
percent
: battery power left as a percentage.secsleft: a rough approximation of how many seconds are left before the battery runs out of power. If the AC power cable is connected this is set to -
psutil.POWERTIMEUNLIMITED. If it can’t be determined it is set to psutil.POWERTIMEUNKNOWN.Пример использования psutil.sensors_battery()
:
>>> import psutil >>> def secs2hours(secs): ... mm, ss = divmod(secs, 60) ... hh, mm = divmod(mm, 60) ... return "%d:%02d:%02d" % (hh, mm, ss) >>> battery = psutil.sensors_battery() >>> battery # sbattery(percent=93, secsleft=16628, power_plugged=False) >>> print("charge = %s%%, time left = %s" % (battery.percent, secs2hours(battery.secsleft))) # charge = 93%, time left = 4:37:08
Доступность: Linux, Windows, FreeBSD
Пример представляет простенький сценарий для измерения температуры оборудования в Linux.
import sys import psutil def main(): if not hasattr(psutil, "sensors_temperatures"): sys.exit("платформа не поддерживается") temps = psutil.sensors_temperatures() if not temps: sys.exit("не могу определить никакую температуру") for name, entries in temps.items(): print(name) for entry in entries: print(" %-20s %s °C (high = %s °C, critical = %s °C)" % ( entry.label or name, entry.current, entry.high, entry.critical)) print() if __name__ == '__main__': main()
Вывод сценария:
$ python3 test.py asus asus 47.0 °C (high = None °C, critical = None °C) acpitz acpitz 47.0 °C (high = 103.0 °C, critical = 103.0 °C) coretemp Physical id 0 54.0 °C (high = 100.0 °C, critical = 100.0 °C) Core 0 47.0 °C (high = 100.0 °C, critical = 100.0 °C) Core 1 48.0 °C (high = 100.0 °C, critical = 100.0 °C) Core 2 47.0 °C (high = 100.0 °C, critical = 100.0 °C) Core 3 54.0 °C (high = 100.0 °C, critical = 100.0 °C)
Этот пример представляет собой клон утилиты "sensors" для измерения температуры оборудования в Linux, скорости вентиляторов и извлечения информации о батарее.
import psutil def secs2hours(secs): mm, ss = divmod(secs, 60) hh, mm = divmod(mm, 60) return "%d:%02d:%02d" % (hh, mm, ss) def main(): if hasattr(psutil, "sensors_temperatures"): temps = psutil.sensors_temperatures() else: temps = {} if hasattr(psutil, "sensors_fans"): fans = psutil.sensors_fans() else: fans = {} if hasattr(psutil, "sensors_battery"): battery = psutil.sensors_battery() else: battery = None if not any((temps, fans, battery)): print("не удается прочитать информацию " "о температуре, вентиляторах или батарее") return names = set(list(temps.keys()) + list(fans.keys())) for name in names: print(name) # температура. if name in temps: print(" Temperatures:") for entry in temps[name]: print(" %-20s %s°C (high=%s°C, critical=%s°C)" % ( entry.label or name, entry.current, entry.high, entry.critical)) # вентиляторы. if name in fans: print(" Fans:") for entry in fans[name]: print(" %-20s %s RPM" % ( entry.label or name, entry.current)) # батарея. if battery: print("Battery:") print(" charge: %s%%" % round(battery.percent, 2)) if battery.power_plugged: print(" status: %s" % ( "charging" if battery.percent < 100 else "fully charged")) print(" plugged in: yes") else: print(" left: %s" % secs2hours(battery.secsleft)) print(" status: %s" % "discharging") print(" plugged in: no") if __name__ == '__main__': main()
Вывод сценария:
$ python3 test.py asus Temperatures: asus 57.0°C (high=None°C, critical=None°C) Fans: cpu_fan 3500 RPM acpitz Temperatures: acpitz 57.0°C (high=108.0°C, critical=108.0°C) coretemp Temperatures: Physical id 0 61.0°C (high=87.0°C, critical=105.0°C) Core 0 61.0°C (high=87.0°C, critical=105.0°C) Core 1 59.0°C (high=87.0°C, critical=105.0°C) Battery: charge: 84.95% status: charging plugged in: yes