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')exceptIOError:# proc has already terminatedcontinue
Sie müssen den Aufruf von read () mit einem try / exception-Block umgeben, da eine vom Lesen von os.listdir ('/ proc') zurückgegebene PID zum Zeitpunkt des Lesens der cmdline möglicherweise nicht mehr vorhanden ist.
Yanamon
4
Zu guter Letzt! Validierung! Jetzt kann ich aufhören! :-)
Bobince
5
-1 für / proc, da es nicht portabel ist und bessere Schnittstellen verfügbar sind
Good Person
2
Achtung: Die Kommandozeile wird mit 0x00 beendet. Leerzeichen werden ebenfalls durch dasselbe Zeichen ersetzt.
Federico
2
Einfach verwenden 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.
RichVel
83
Sie könnten psutil als plattformunabhängige Lösung verwenden!
@amos macht irgendwie Sinn - Sie möchten zuerst über Berechtigungen verfügen, bevor Sie Informationen zu Prozessen abrufen. Danke für den Tipp.
JSmyth
Um den OSX-Punkt zu erweitern, benötigen Sie im Gegensatz zu Linux Root-Berechtigungen unter OSX, um Prozessinformationen abzurufen.
RichVel
8
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.
PSI wurde zuletzt im Jahr 2009 aktualisiert, während Psutil in diesem Monat (November 2015) aktualisiert wurde - Psutil scheint eine bessere Wahl zu sein.
RichVel
7
Die sanktionierte Methode zum Erstellen und Verwenden von untergeordneten Prozessen erfolgt über das Unterprozessmodul.
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 :)
Antworten:
IMO, das das
/proc
Dateisystem betrachtet, ist weniger böse als das Hacken der Textausgabe vonps
.quelle
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!
quelle
Sie können eine Drittanbieter-Bibliothek wie PSI verwenden :
quelle
Die sanktionierte Methode zum Erstellen und Verwenden von untergeordneten Prozessen erfolgt über das Unterprozessmodul.
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.
quelle
Ich würde das Unterprozessmodul verwenden , um den Befehl
ps
mit 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 zumps
Beispiel 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 ).
quelle
quelle