Рубрики
Без рубрики

Проверьте температуру вашего процессора с помощью Python (и другие прохладные трюки)

Автор оригинала: FreeCodeCapm Team.

Ори Роза

Python’s Модуль PSUTIL Предоставляет интерфейс со всеми ресурсами и процессами ПК.

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

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

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

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

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

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)]}

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

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

(Есть процессы, которые требуют некоторых администраторов или системных привилегий, поэтому после попытки доступа к их экземпляру он не удастся с ошибкой «AccessDodeded».)

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

Во-первых, мы создаем экземпляр, предоставив ID требуемый процесс:

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

Мы должны помнить, что, если у нас нет некоторых корневых привилегий, мы не можем получить доступ к конкретным процессам. Поэтому нам нужно обернуть его в заявлении Try-Chat для обработки ошибки «AccessDeded».

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

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

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 – отличная библиотека для управления системой. Это полезно для управления ресурсами как часть потока кода.

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