Проверьте температуру вашего ЦБ с помощью Python (и другие крутые приемы)

1656607445 proverte temperaturu vashego czb s pomoshhyu python i drugie krutye

автор Ори Роза

rEV20g78X3XQH2m7m4rtBX5VkdwfzhnvUXg9

Модуль psutil Python обеспечивает интерфейс со всеми ресурсами и ПК.

Этот модуль очень полезен, если мы хотим получить некоторые данные об определенном ресурсе или управлять ресурсом в соответствии с его состоянием.

В этой статье я покажу вам основные возможности этого модуля и как ими пользоваться.

Получение информации о ресурсах ПК

Давайте посмотрим, как мы можем получить кое-какую информацию о текущем состоянии системы нашего ПК.

Мы можем получить некоторую информацию о процессоре с момента загрузки, включая количество системных вызовов и переключений контекста:

In [1]: psutil.cpu_stats()Out[1]: scpustats(ctx_switches=437905181,interrupts=2222556355L,soft_interrupts=0,syscalls=109468308)

Мы можем получить некоторую информацию о диске и состоянии памяти:

In [1]: psutil.disk_usage("c:")Out[1]: sdiskusage(total=127950385152L,                   used=116934914048L,                   free=11015471104L,                   percent=91.4)
In [2]: psutil.virtual_memory()Out[2]: svmem(total=8488030208L,              available=3647520768L,              percent=57.0,              used=4840509440L,              free=3647520768L)

Мы даже можем получить физическую информацию о том, сколько секунд осталось автономной работы или текущую температуру процессора:

In [1]: psutil.sensors_battery()Out[1]: sbattery(percent=77, secsleft=18305, power_plugged=False)
In [2]: psutil.sensors_temperatures() # In CelsiusOut[2]: {'ACPI\\ThermalZone\\THM0_0':         [shwtemp(label="",          current=49.05000000000001,          high=127.05000000000001,          critical=127.05000000000001)]}

Получение информации о процессах

Одной из мощнейших функций этого модуля является класс «Процесс». Мы можем получить доступ к ресурсам и статистике каждого процесса и отвечать на них.

(Существуют процессы, требующие определенных прав администратора или системы, поэтому после попытки получить доступ к их экземпляру он не выйдет с ошибкой AccessDenied.)

Давайте проверим эту функцию.

Сначала мы создаем экземпляр, предоставляя нужный идентификатор процессу:

In [1]: p = psutil.Process(9800)

Тогда мы сможем получить доступ ко всей информации и статистике процесса:

In [1]: p.exe()Out[1]: 'C:\\Windows\\System32\\dllhost.exe'
In [2]: p.cpu_percent()Out[2]: 0.0
In [3]: p.cwd()Out[3]: 'C:\\WINDOWS\\system32'

Давайте создадим функцию, связывающую открытые порты соединений с процессами.

Поначалу нам необходимо повторить все открытые соединения. ps.net_connections это именно то, что нам нужно!

In [1]: ps.net_connections?Signature: ps.net_connections(kind='inet')Docstring:Return system-wide socket connections as a list of(fd, family, type, laddr, raddr, status, pid) namedtuples.In case of limited privileges 'fd' and 'pid' may be set to -1and None respectively.The *kind* parameter filters for connections that fit thefollowing criteria:
+------------+----------------------------------------------------+| Kind Value | Connections using                                  |+------------+----------------------------------------------------+| inet       | IPv4 and IPv6                                      || inet4      | IPv4                                               || inet6      | IPv6                                               || tcp        | TCP                                                || tcp4       | TCP over IPv4                                      || tcp6       | TCP over IPv6                                      || udp        | UDP                                                || udp4       | UDP over IPv4                                      || udp6       | UDP over IPv6                                      || unix       | UNIX socket (both UDP and TCP protocols)           || all        | the sum of all the possible families and protocols |+------------+----------------------------------------------------+

Мы видим, что одним из атрибутов, возвращаемых net_connections, является «pid».

Мы можем связать это с названием процесса:

In [1]: def link_connection_to_process():    ...:     for connection in ps.net_connections():    ...:         try:    ...:             yield [ps.Process(pid=connection.pid).name(),    ...:                   connection]    ...:         except ps.AccessDenied:    ...:             continue # Keep going if we don't have access

Мы должны помнить, что если у нас нет прав root, мы не можем получить доступ к отдельным процессам. Поэтому нам нужно обратить его в оператор try-catch для обработки ошибки «AccessDenied».

Давайте проверим выход.

Он выведет много данных, поэтому давайте напечатаем первый член:

In [1]: for proc_to_con in ps.net_connections():    ...:     print proc_to_con    ...:     raw_input("...")    ...:['ManagementServer.exe', sconn(fd=-1, family=2, type=1, laddr=addr(ip='127.0.0.1', port=5905), raddr=addr(ip='127.0.0.1', port=49728), status="ESTABLISHED", pid=5224)]...

Как видим, первый член – это имя процесса, а второй – данные соединения: IP-адрес, порт, статус и так далее.

Эта функция очень полезна для изучения портов, используемых каждым процессом.

Мы все получили ошибку «Этот адрес уже используется», не правда ли?

Вывод

Модуль psutil – это отличная библиотека для управления системой. Это полезно для управления ресурсами как частью потока кода.

Надеюсь, эта статья научила вас чему-то новому, и я с нетерпением жду ваших отзывов. Скажите, пожалуйста, было ли это полезно для вас?

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *