IMO regarder le /procsystè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')exceptIOError:# proc has already terminatedcontinue
Vous devrez entourer l'appel read () d'un bloc try / except car un pid renvoyé par la lecture de os.listdir ('/ proc') peut ne plus exister au moment où vous lisez la cmdline.
Yanamon le
4
Enfin! Validation! Maintenant je peux m'arrêter! :-)
bobince
5
-1 pour / proc car ce n'est pas portable et il y a de meilleures interfaces disponibles
Good Person
2
Attention: la ligne de commande se termine par 0x00. Les espaces sont également remplacés par le même caractère.
Federico
2
Il suffit d'utiliser psutil- il fait tout cela via une belle interface Pythonic et est portable si vous voulez un jour tourner sur un serveur non Linux.
RichVel
83
Vous pouvez utiliser psutil comme solution indépendante de la plate-forme!
Ce n'est pas complètement indépendant de la plate-forme - sur OSX, vous pouvez rencontrer des erreurs AccessDenied
amos
@amos a un peu de sens - vous voudriez d'abord avoir des privilèges avant de contacter des informations sur les processus. Merci pour l'indice.
JSmyth
Pour amplifier le point OSX, vous avez besoin des privilèges root sur OSX pour obtenir des informations sur les processus, contrairement à Linux.
RichVel
8
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.
PSI a été mis à jour pour la dernière fois en 2009, alors que psutil a été mis à jour ce mois-ci (novembre 2015) - il semble que psutil soit un meilleur pari.
RichVel
7
La manière autorisée de créer et d'utiliser des processus enfants consiste à utiliser le module de sous-processus.
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 psavec 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 pspar exemple :)
Réponses:
IMO regarder le
/proc
système de fichiers est moins désagréable que de pirater la sortie texte deps
.la source
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!
la source
Vous pouvez utiliser une bibliothèque tierce, telle que PSI :
la source
La manière autorisée de créer et d'utiliser des processus enfants consiste à utiliser le module de sous-processus.
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.
la source
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 deps
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 ).
la source
la source