Як отримати запущений список процесів за допомогою Python в Linux?
Відповіді:
ІМО дивиться на /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
psutil- він робить все це за допомогою чудового інтерфейсу Pythonic і є портативним, якщо ви коли-небудь захочете працювати на сервері, який не є Linux.
Ви можете використовувати 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]
Ви можете використовувати сторонні бібліотеки, такі як PSI :
PSI - це пакет Python, який забезпечує доступ у режимі реального часу до процесів та іншої різної системної інформації, такої як архітектура, час завантаження та файлові системи. Він має пітонічний API, який узгоджується на всіх підтримуваних платформах, але також надає деталі, що стосуються певної платформи, де це бажано.
Санкціонований спосіб створення та використання дочірніх процесів - це модуль підпроцесу.
import subprocess
pl = subprocess.Popen(['ps', '-U', '0'], stdout=subprocess.PIPE).communicate()[0]
print pl
Команда розбита на список аргументів python, так що її не потрібно запускати в оболонці (за замовчуванням підпроцес. Через це ми не можемо просто поставити "ps -U 0" на Попен.
Я б використовував модуль підпроцесу для виконання команди psз відповідними параметрами. Додавши параметри, ви можете змінити, які процеси ви бачите. Безліч прикладів щодо підпроцесу на SO. Це питання відповідає, як проаналізувати вихідні дані, psнаприклад :)
Ви можете, як показав один із прикладів відповідей, також використовувати модуль PSI для доступу до системної інформації (наприклад, таблиці процесів у цьому прикладі ).
import os
lst = os.popen('sudo netstat -tulpn').read()
lst = lst.split('\n')
for i in range(2,len(lst)):
print(lst[i])