Список процессов в Linux через Python - PullRequest
82 голосов
/ 24 апреля 2010

Как мне получить список запущенных процессов, используя Python в Linux?

Ответы [ 6 ]

118 голосов
/ 24 апреля 2010

ИМО, глядя на файловую систему /proc, менее отвратительна, чем взлом текстового вывода ps.

import os
pids = [pid for pid in os.listdir('/proc') if pid.isdigit()]

for pid in pids:
    try:
        print open(os.path.join('/proc', pid, 'cmdline'), 'rb').read().split('\0')
    except IOError: # proc has already terminated
        continue
73 голосов
/ 17 июня 2011

Вы можете использовать psutil в качестве независимого от платформы решения!

import psutil
psutil.pids()

[1, 2, 3, 4, 5, 6, 7, 46, 48, 50, 51, 178, 182, 222, 223, 224,
268, 1215, 1216, 1220, 1221, 1243, 1244, 1301, 1601, 2237, 2355,
2637, 2774, 3932, 4176, 4177, 4185, 4187, 4189, 4225, 4243, 4245, 
4263, 4282, 4306, 4311, 4312, 4313, 4314, 4337, 4339, 4357, 4358, 
4363, 4383, 4395, 4408, 4433, 4443, 4445, 4446, 5167, 5234, 5235, 
5252, 5318, 5424, 5644, 6987, 7054, 7055, 7071]
8 голосов
/ 24 апреля 2010

Вы можете использовать стороннюю библиотеку, такую ​​как PSI :

PSI - это пакет Python, обеспечивающий доступ в реальном времени к процессам и другой различной системной информации, такой как архитектура, время загрузки и файловые системы. Он имеет питонический API, который является единым для всех поддерживаемых платформ, но также предоставляет информацию о платформе, где это желательно.

7 голосов
/ 24 апреля 2010

Санкционированный способ создания и использования дочерних процессов - через модуль подпроцесса.

import subprocess
pl = subprocess.Popen(['ps', '-U', '0'], stdout=subprocess.PIPE).communicate()[0]
print pl

Команда разбита на список аргументов в python, поэтому ее не нужно запускать в оболочке (по умолчанию subprocess.Popen не использует какую-либо среду оболочки, она просто выполняет ее). Из-за этого мы не можем просто поставить «ps -U 0» Попену.

0 голосов
/ 27 апреля 2018
import os
lst = os.popen('sudo netstat -tulpn').read()
lst = lst.split('\n')
for i in range(2,len(lst)):
    print(lst[i])
0 голосов
/ 24 апреля 2010

Я бы использовал модуль подпроцесс для выполнения команды ps с соответствующими параметрами. Добавляя опции, вы можете изменить, какие процессы вы видите. Много примеров подпроцесса на SO. Этот вопрос отвечает, как проанализировать вывод ps, например:)

Вы можете, как показал один из примеров ответов , также использовать модуль PSI для доступа к системной информации (например, к таблице процессов в в этом примере ) .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...