Antworten:
IMO, das das /procDateisystem betrachtet, ist weniger böse als das Hacken der Textausgabe von 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- dies alles geschieht über eine schöne Pythonic-Oberfläche und ist portabel, wenn Sie jemals auf einem Nicht-Linux-Server ausgeführt werden möchten.
Sie könnten psutil als plattformunabhängige Lösung verwenden!
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]
Sie können eine Drittanbieter-Bibliothek wie PSI verwenden :
PSI ist ein Python-Paket, das Echtzeitzugriff auf Prozesse und andere verschiedene Systeminformationen wie Architektur, Boottime und Dateisysteme bietet. Es verfügt über eine Python-API, die auf allen unterstützten Plattformen konsistent ist, bei Bedarf jedoch auch plattformspezifische Details bereitstellt.
Die sanktionierte Methode zum Erstellen und Verwenden von untergeordneten Prozessen erfolgt über das Unterprozessmodul.
import subprocess
pl = subprocess.Popen(['ps', '-U', '0'], stdout=subprocess.PIPE).communicate()[0]
print pl
Der Befehl ist in eine Python-Liste von Argumenten unterteilt, sodass er nicht in einer Shell ausgeführt werden muss (Standardmäßig verwendet der Unterprozess.Popen keine Shell-Umgebung, in der er nur ausgeführt wird). Aus diesem Grund können wir Popen nicht einfach 'ps -U 0' liefern.
Ich würde das Unterprozessmodul verwenden , um den Befehl psmit den entsprechenden Optionen auszuführen . Durch Hinzufügen von Optionen können Sie ändern, welche Prozesse angezeigt werden. Viele Beispiele zum Unterprozess auf SO. Diese Frage beantwortet, wie zum psBeispiel die Ausgabe von analysiert wird :)
Wie in einer der gezeigten Beispielantworten angegeben, können Sie auch das PSI- Modul verwenden, um auf Systeminformationen zuzugreifen (z. B. die Prozesstabelle in diesem Beispiel ).
import os
lst = os.popen('sudo netstat -tulpn').read()
lst = lst.split('\n')
for i in range(2,len(lst)):
print(lst[i])