Linux'ta Python kullanarak işlem listesini nasıl çalıştırabilirim?
Yanıtlar:
IMO'nun /procdosya sistemine bakması , metin çıktısını hacklemekten daha az kötüdür 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- tüm bunları güzel bir Pythonic arayüz aracılığıyla yapar ve Linux olmayan bir sunucuda çalıştırmak isterseniz taşınabilir.
Psutil'i platformdan bağımsız bir çözüm olarak kullanabilirsiniz !
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 gibi bir üçüncü taraf kitaplığı kullanabilirsiniz :
PSI, süreçlere ve mimari, boottime ve dosya sistemleri gibi diğer çeşitli sistem bilgilerine gerçek zamanlı erişim sağlayan bir Python paketidir. Desteklenen tüm platformlarda tutarlı olan ancak aynı zamanda istendiğinde platforma özgü ayrıntıları ortaya çıkaran bir pitonik API'ye sahiptir.
Çocuk süreçleri yaratmanın ve kullanmanın onaylanmış yolu, alt süreç modülüdür.
import subprocess
pl = subprocess.Popen(['ps', '-U', '0'], stdout=subprocess.PIPE).communicate()[0]
print pl
Komut, bir kabukta çalıştırılmasına gerek kalmaması için bir python argümanlar listesine bölünmüştür (Varsayılan olarak, alt işlem.Popen herhangi bir kabuk ortamı kullanmaz, sadece çalıştırır). Bu nedenle Popen'e 'ps -U 0' sağlayamıyoruz.
Komutu uygun seçeneklerle yürütmek için alt işlem modülünü kullanırdım ps. Seçenekler ekleyerek hangi işlemleri gördüğünüzü değiştirebilirsiniz. SO'da alt süreçle ilgili çok sayıda örnek. Bu sorups , örneğin çıktısının nasıl ayrıştırılacağını yanıtlar :)
Yapabilirsin, olarak gösterdi örnek cevapları biri de kullanmak PSI (örneğin süreç tablo olarak erişim sistemi bilgilere modülü bu örnekte ).
from psutil import process_iter
from termcolor import colored
names = []
ids = []
x = 0
z = 0
k = 0
for proc in process_iter():
name = proc.name()
y = len(name)
if y>x:
x = y
if y<x:
k = y
id = proc.pid
names.insert(z, name)
ids.insert(z, id)
z += 1
print(colored("Process Name", 'yellow'), (x-k-5)*" ", colored("Process Id", 'magenta'))
for b in range(len(names)-1):
z = x
print(colored(names[b], 'cyan'),(x-len(names[b]))*" ",colored(ids[b], 'white'))
import os
lst = os.popen('sudo netstat -tulpn').read()
lst = lst.split('\n')
for i in range(2,len(lst)):
print(lst[i])