Risposte:
IMO guardare il /proc
filesystem è meno fastidioso che hackerare l'output di testo di 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
: fa tutto questo attraverso una bella interfaccia Pythonic ed è portatile se vuoi funzionare su un server non Linux.
Potresti usare psutil come soluzione indipendente dalla piattaforma!
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]
Puoi utilizzare una libreria di terze parti, come PSI :
PSI è un pacchetto Python che fornisce accesso in tempo reale ai processi e ad altre informazioni di sistema varie come architettura, boottime e filesystem. Ha un'API pitonica che è coerente su tutte le piattaforme supportate, ma espone anche dettagli specifici della piattaforma, ove desiderabile.
Il modo approvato per creare e utilizzare processi figlio è attraverso il modulo sottoprocesso.
import subprocess
pl = subprocess.Popen(['ps', '-U', '0'], stdout=subprocess.PIPE).communicate()[0]
print pl
Il comando è suddiviso in un elenco di argomenti Python in modo che non debba essere eseguito in una shell (per impostazione predefinita, il subprocess.Popen non utilizza alcun tipo di ambiente shell, ma lo esegue solo). Per questo motivo non possiamo semplicemente fornire 'ps -U 0' a Popen.
Userei il sottoprocesso modulo per eseguire il comando ps
con le opzioni appropriate. Aggiungendo opzioni puoi modificare i processi che vedi. Molti esempi sul sottoprocesso su SO. Questa domanda risponde ad esempio su come analizzare l'output di ps
:)
È possibile, come una delle risposte di esempio mostrate, utilizzare anche il modulo PSI per accedere alle informazioni di sistema (come la tabella del processo in questo esempio ).
import os
lst = os.popen('sudo netstat -tulpn').read()
lst = lst.split('\n')
for i in range(2,len(lst)):
print(lst[i])