Comment puis-je obtenir la liste des processus en cours d'exécution à l'aide de Python sur Linux?
Réponses:
IMO regarder le /proc
système de fichiers est moins désagréable que de pirater la sortie texte de 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
- il fait tout cela via une belle interface Pythonic et est portable si vous voulez un jour tourner sur un serveur non Linux.
Vous pouvez utiliser psutil comme solution indépendante de la plate-forme!
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]
Vous pouvez utiliser une bibliothèque tierce, telle que PSI :
PSI est un package Python fournissant un accès en temps réel aux processus et à d'autres informations système diverses telles que l'architecture, le temps de démarrage et les systèmes de fichiers. Il dispose d'une API pythonique qui est cohérente sur toutes les plates-formes prises en charge, mais expose également des détails spécifiques à la plate-forme lorsque cela est souhaitable.
La manière autorisée de créer et d'utiliser des processus enfants consiste à utiliser le module de sous-processus.
import subprocess
pl = subprocess.Popen(['ps', '-U', '0'], stdout=subprocess.PIPE).communicate()[0]
print pl
La commande est décomposée en une liste d'arguments python afin qu'elle n'ait pas besoin d'être exécutée dans un shell (par défaut, le sous-processus.Popen n'utilise aucun type d'environnement shell, il l'exécute uniquement). Pour cette raison, nous ne pouvons pas simplement fournir «ps -U 0» à Popen.
J'utiliserais le module de sous - processus pour exécuter la commande ps
avec les options appropriées. En ajoutant des options, vous pouvez modifier les processus que vous voyez. Beaucoup d'exemples de sous-processus sur SO. Cette question explique comment analyser la sortie de ps
par exemple :)
Vous pouvez, comme l' un des exemples de réponses montrés, également utiliser le module PSI pour accéder aux informations système (comme la table de processus dans cet exemple ).
import os
lst = os.popen('sudo netstat -tulpn').read()
lst = lst.split('\n')
for i in range(2,len(lst)):
print(lst[i])