Материал содержит описание функций
модуля psutil
с примерами, которые считывают и возвращают
информацию с датчиков сервера, таких как температура оборудования (процессор, HDD и т.д.), скорость вентиляторов, статус и заряд батареи.
Содержание:
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.- `power_plugged: True if the AC power cable is connected, False if not or None if it can’t be determined.
Пример использования 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