Python проверка температуры процессора
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
import wmi |
def avg ( value_list ): |
num = 0 |
length = len ( value_list ) |
for val in value_list : |
num += val |
return num / length |
w = wmi . WMI ( namespace = "root \\ OpenHardwareMonitor" ) |
sensors = w . Sensor () |
cpu_temps = [] |
gpu_temp = 0 |
for sensor in sensors : |
if sensor . SensorType == u'Temperature' and not 'GPU' in sensor . Name : |
cpu_temps += [ float ( sensor . Value )] |
elif sensor . SensorType == u'Temperature' and 'GPU' in sensor . Name : |
gpu_temp = sensor . Value |
print "Avg CPU: <>" . format ( avg ( cpu_temps )) |
print "GPU: <>" . format ( gpu_temp ) |
Project description
Statistics
View statistics for this project via Libraries.io, or by using our public dataset on Google BigQuery
License: BSD License (BSD)
Maintainer: Maxim Grischuk
Tags pyspectator, spectator, monitoring, tool, statistic, stats, computer, pc, server, mem, memory, network, net, io, processor, cpu, hdd, hard, disk, drive
How to install
Run as root user:
KataWeeb commented Dec 29, 2021
how I can show only the temperature of my cpu for example?
Requirements
- OS: Linux, Windows, FreeBSD, Solaris
- Python version: 3.X
- Packages: psutil, netifaces, wmi (only on Windows), enum34 (only on python 3.0.0 - 3.4.0)
- For Windows OS Microsoft Visual C++ 10.0 or higher is required
Project links
Statistics
View statistics for this project via Libraries.io, or by using our public dataset on Google BigQuery
License: BSD License (BSD)
Maintainer: Maxim Grischuk
Tags pyspectator, spectator, monitoring, tool, statistic, stats, computer, pc, server, mem, memory, network, net, io, processor, cpu, hdd, hard, disk, drive
Class “Computer”
Classifiers
- Development Status
- 5 - Production/Stable
- Console
- MacOS X
- Win32 (MS Windows)
- Developers
- Information Technology
- System Administrators
- OSI Approved :: BSD License
- English
- MacOS
- Microsoft :: Windows
- OS Independent
- POSIX
- POSIX :: Linux
- Unix
- C
- Python
- Python :: 3
- Python :: 3.0
- Python :: 3.1
- Python :: 3.2
- Python :: 3.3
- Python :: 3.4
- Python :: 3.5
- Python :: 3.6
- Python :: 3.7
- Python :: 3.8
- Python :: 3.9
- Python :: Implementation :: CPython
- Software Development :: Libraries
- Software Development :: Libraries :: Python Modules
- System :: Benchmark
- System :: Hardware
- System :: Monitoring
- System :: Networking
- System :: Networking :: Monitoring
- System :: Systems Administration
- Utilities
How to use
You can use pyspectator as module for your own project. Simple example of usage is presented in file “console.py”.
NOTE: on Windows pyspectator can require elevated privileges.
KataWeeb commented Dec 29, 2021
how I can show only the temperature of my cpu for example?
Class “Cpu”
Example of usage
There is simple project named pyspectator_tornado developed special for demonstration of pyspectator features.
Project links
Project details
Maintainers
Summary
pyspectator is a Python cross-platform tool for monitoring resources of OS: CPU, memory, disk, network.
Letronix624 commented Feb 16, 2022
memory usage rises all the time.
Navigation
kshitij1235 commented Feb 22, 2022
i got to have this error
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "d:\kshitij\python\overlay\cpu_temp.py", line 11, in
w = wmi.WMI(namespace="root\OpenHardwareMonitor")
File "D:\programs\python\python3.10\lib\site-packages\wmi.py", line 1354, in connect
handle_com_error()
File "D:\programs\python\python3.10\lib\site-packages\wmi.py", line 258, in handle_com_error
raise klass(com_error=err)
wmi.x_wmi:You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
There is a newer "sysfs thermal zone" API (see also LWN article and Linux kernel doc) showing temperatures under e.g.
Readings are in thousandths of degrees Celcius (although in older kernels, it may have just been degrees C).
I recently implemented this in psutil for Linux only.
If your Linux supports ACPI, reading pseudo-file /proc/acpi/thermal_zone/THM0/temperature (the path may differ, I know it's /proc/acpi/thermal_zone/THRM/temperature in some systems) should do it. But I don't think there's a way that works in every Linux system in the world, so you'll have to be more specific about exactly what Linux you have!-)
Reading files in /sys/class/hwmon/hwmon*/temp1_* worked for me but AFAIK there are no standards for doing this cleanly. Anyway, you can try this and make sure it provides the same number of CPUs shown by "sensors" cmdline utility, in which case you can assume it's reliable.
Py-cputemp seems to do the job.
py-cputemp is basically a thin veneer over /proc/acpi/thermal_zone. This originally didn't work for me until I realized that I needed to enable ACPI in my BIOS. I had disabled it because I figured I didn't want power management on a server. Thanks for the answer; I'm accepting this one because it was posted first and lead me to think about the source of my problem.
I prefer gpiozero from gpiozero import CPUTemperature, LoadAverage cpu = CPUTemperature() print ("CPU temperature is %s" % cpu.temperature) load = LoadAverage() print ("CPU temperature is %s" % load.load_average)
Look after pyspectator in pip
I tried the code you provided but first of all the import seems to be from pyspectator.processor import Cpu and if it's python3 as the warning says the print command should use brackets.. anyway this dont work for me the cpu.load is displayed correctly but the temperature is always None :(
Depending on your Linux distro, you may find a file under /proc that contains this information. For example, this page suggests /proc/acpi/thermal_zone/THM/temperature .
As an alternative you can install the lm-sensors package, then install PySensors (a python binding for libsensors).
You could try the PyI2C module, it can read directly from the kernel.
Sysmon works nice. Nicely made, it does much more than measure CPU temperature. It is a command line program, and logs all the data it measured to a file. Also, it is open-source and written in python 2.7.
I would reflect on SDsolar's solving above, modified the code a bit., and now it shows not only one value. Until the while loop you gets continuously the actual value of the CPUs temperature
On linux systems:
Install the pyspectator module:
Put this code into a file 'cpu-temp.py'
For Linux systems(Tried on Ubuntu 18.04)
Install the acpi module by sudo apt install acpi
Running acpi -V should give you a ton of info about your system. Now we just need to get the temperature value via python.
The percentage variable will give you the temperature. So, first we take the output of the acpi -V command in a text file and then read it. We need to convert it into an integer since the data is all in String type.
На написание поста сподвигла, казалось бы, тривиальная задача — мониторинг температуры в серверной. На эту тему существует довольно много различных решений (например, повесить видеокамеру и градусник перед ней), но большинство из крутых систем мониторинга, автоматического управления кондиционерами и т.п. стоят приличных денег. Отличие же предложенного варианта — бюджет. Около 250 российских рублей и немножко мозгов (бесценно).
Решение задачи началось, естественно, с поиска датчика температуры. Дешевого, потому что дорогих много, а руководству объяснять долго. Так же, в целях экономии, был выбран вариант USB-датчика (LAN — дороже). Где у нас самые дешевые датчики? Правильно, на ebay. Заходим туда и по запросу «usb thermometer» быстро находим вот такую игрушку, как на картинке. Заказываем, оформляем, ждем доставки.Итак, предложенная разработчиками программа не подходит по всем параметрам. Какая альтернатива? Собственный софт для получения температуры. В базовом варианте мне нужна была программа, выдающая температуру с датчика. Все дальнейшие обработки вроде занесения в базу, отправки писем по тревоге, анализ ситуации и т.п. легко вешаются на планировщик, опрашивающий датчик каждую минуту.
Поиск в интернете легко выводит на модуль для python, называемый temper-python. Отлично! Вот уже и нормальный софт с кроссплатформенным интерпретатором. Фиг там. Этот модуль работает только под linux. И не зря в заголовок вынесена другая операционка. Мой сервер приложений работает на Windows. Но это же python! Значит, скрипт наверняка можно переделать для работы в Windows. Этим и займемся.
cd C:\Downloads\pyusb-1.0.0a2
C:\Python34\python.exe setup.py installРаспаковываем, заходим в папку bin и запускаем файл inf-wizard.exe. Эта программа автоматически сгенерирует папку драйверов под конкретное устройство и установит их.
В списке устройств для установки драйвера необходимо выбрать TEMPerV1.4 (Interface 1). Нажимаем Next, соглашаемся со всем, с чем можно согласиться и доходим до окна сохранения драйверов. Здесь лучше создать отдельную папку для temper'a, куда утилитка сложит все необходимые драйверы. После этого будет предложено установить созданный драйвер. Делаем это кнопкой Install Now.
Если все прошло успешно, то "Составное USB устройство" в Диспетчере устройств исчезнет, а появится TEMPerV1.4 (Interface 1).
В папке bin/amd64 дистрибутива libusb-win32 есть утилита testlibusb-win.exe. Запустим ее, чтобы убедиться, что нужное нам устройство видно системе. Если все хорошо и устройство видно, остается самое интересное — скрипт на python.
Как уже написано выше, за основу я взял модуль temper-python. Модуль этот навороченный, который нужно устанавливать, в котором есть конфиг для поправок, выбор Цельсия или Фаренгейта, и даже поддержка SNMP. Это все круто, но мне не нужно. Поэтому упростим все до одного скрипта, выводящего в консоль температуру. Кроме того, в temper-python есть еще и куча строк, которые нужны только в linux, a в windows попросту не работают.
Начнем с задания глобальных переменных:
По VENDOR_ID и PRODUCT_ID скрипт найдет среди всех устройств Temper и будет использовать его. TIMEOUT и OFFSET в общем-то, понятны без объяснения — таймаут доступа к датчику и поправка температуры. Поправка нужна, так как дешевый китайский датчик может ошибаться в пределах нескольких градусов, но это достаточно определить один раз по комнатному термометру и забыть.
Оставшиеся переменные относятся к api датчика и их трогать не надо.
Теперь самое главное — класс для обращения к датчику.
_control_transfer отвечает за передачу команд датчику, _interrupt_read — за чтение ответа. В get_temperature мы, собственно, все эти команды отправляем, читаем ответ и преобразуем набор цифр в человекопонятную температуру.Чтобы все это заработало при запуске, несколько строк для инициализации:
Первая строчка ищет наш TEMPer среди устройств, вторая и третья — запрашивают температуру.
Вот, собственно, и все. Проверить работу скрипта можно стандартной командой в консоли:
На экран будет выведена температура с датчика. Что с ней делать — пусть каждый сам для себя решает.
Эта библиотека пригодится вам, если вы захотите получить какие-либо данные о конкретном процессе или комплектующих. Также появится возможность управлять ими в зависимости от их состояния.Какую же информацию можно получить? Можно достать данные о процессоре с момента загрузки, в том числе о том, сколько системных вызовов и контекстных переключателей он сделал:
Также есть возможность извлечь информацию о диске и состоянии памяти:
Можно даже получить данные о времени автономной работы или узнать текущую температуру процессора:
Одной из самых классных фишек этой библиотеки является то, что можно получить доступ к процессам и их статистике. Однако есть процессы, которые требуют наличия прав администратора. В противном случае после попытки доступа произойдет сбой с ошибкой "AccessDenied". Давайте протестируем эту функцию.
Сначала создадим экземпляр, предоставляя требуемый идентификатор процесса:
Затем можно получить доступ ко всей информации и статистике процесса:
Создадим функцию, которая связывает открытые порты соединений с процессами. Для начала нужно перебрать все открытые соединения.
Обратим внимание на то, что одним из возвращаемых атрибутов является "pid".
Можно связать это с именем процесса:
Но не стоит забывать, что если пользователь не обладает правами администратора, он не сможет получить доступ к определенным процессам. Проверим выходные данные. Он вернет много данных, поэтому выведем только первое значение:
Как можно увидеть, первое значение – это имя процесса, второй – данные соединения: IP-адрес, порт, статус и так далее. Данная функция очень полезна для понимания того, какие порты используются конкретными процессами.
Psutil – отличная библиотека, предназначенная для управления системой. Она полезна для управления ресурсами как частью потока кода.
pyspectator is a Python cross-platform tool for monitoring OS resources.
Читайте также: