Автор оригинала: 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 – отличная библиотека для управления системой. Это полезно для управления ресурсами как часть потока кода.
Я надеюсь, что эта статья научила вам что-то новое, и я с нетерпением жду ваших отзывов. Пожалуйста, скажите – было ли это полезно для вас?