MyTetra Share
Делитесь знаниями!
Как узнать температуру процессора с помощью psutil в Python
29.07.2019
23:51
Раздел: !Закладки - Python

Как узнать температуру процессора с помощью psutil в Python

От vismut

 -

13.06.2018

Библиотека psutil предназначена для получения информации о запущенных процессах и использовании системы (процессор, память, диски, сеть).

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

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

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


1

2

3

4

5

6

In [1]: psutil.cpu_stats()

Out[1]: scpustats(

ctx_switches=437905181,

interrupts=2222556355L,

soft_interrupts=0,

syscalls=109468308)

Также есть возможность извлечь информацию о диске и состоянии памяти:


1

2

3

4

5

6

7

8

9

10

11

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)

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


1

2

3

4

5

6

7

8

9

In [1]: psutil.sensors_battery()

Out[1]: sbattery(percent=77, secsleft=18305, power_plugged=False)

 

In [2]: psutil.sensors_temperatures() # In Celsius

Out[2]: {'ACPI\\ThermalZone\\THM0_0':

        [shwtemp(label='',

         current=49.05000000000001,

         high=127.05000000000001,

         critical=127.05000000000001)]}

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

Одной из самых классных фишек этой библиотеки является то, что можно получить доступ к процессам и их статистике. Однако есть процессы, которые требуют наличия прав администратора. В противном случае после попытки доступа произойдет сбой с ошибкой «AccessDenied». Давайте протестируем эту функцию.

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


1

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

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


1

2

3

4

5

6

7

8

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'

Создадим функцию, которая связывает открытые порты соединений с процессами. Для начала нужно перебрать все открытые соединения.


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

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 -1

and None respectively.

The *kind* parameter filters for connections that fit the

following 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 |

+------------+----------------------------------------------------+

Обратим внимание на то, что одним из возвращаемых атрибутов является «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

Но не стоит забывать, что если пользователь не обладает правами администратора, он не сможет получить доступ к определенным процессам. Проверим выходные данные. Он вернет много данных, поэтому выведем только первое значение:


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

Оригинал

Другие материалы по теме:

Так же в этом разделе:
 
MyTetra Share v.0.52
Яндекс индекс цитирования