En supposant que vous êtes sur une plate-forme Unix (de sorte que ps -A
existe),
>>> import subprocess, signal
>>> p = subprocess.Popen(['ps', '-A'], stdout=subprocess.PIPE)
>>> out, err = p.communicate()
vous donne la sortie de ps -A
dans la variable out
(une chaîne). Vous pouvez décomposer en lignes et en boucle sur eux ...:
>>> for line in out.splitlines():
... if 'iChat' in line:
... pid = int(line.split(None, 1)[0])
... os.kill(pid, signal.SIGKILL)
...
(vous pourriez éviter d'importer signal
et utiliser 9
au lieu de signal.SIGKILL
, mais je ne aime pas particulièrement ce style, donc je d plutôt utilisé la constante nommée de cette façon).
Bien sûr, vous pourriez faire un traitement beaucoup plus sophistiqué sur ces lignes, mais cela imite ce que vous faites en shell. Si ce que vous cherchez est d'éviter ps
, c'est difficile à faire sur différents systèmes de type Unix (ps
est leur API commune pour obtenir une liste de processus, dans un sens). Mais si vous avez un système Unix spécifique à l'esprit, seulement (ne nécessitant aucune portabilité multiplateforme), cela peut être possible; en particulier, sur Linux, le pseudo-système de fichiers /proc
est très utile. Mais vous aurez besoin de clarifier vos besoins exacts avant de pouvoir vous aider sur cette dernière partie.
Cela a très bien fonctionné! Je cours un environnement Mac donc je pense que ce sera parfait. Je vous remercie pour votre aide. – Aaron
@Aaron, de rien! –
Ci-dessus fonctionne sur .nix, mais n'est pas pythonique. La méthode appropriée, telle que publiée ci-dessous, consiste à utiliser l'approche os.system ('taskkill/f/im exampleProcess.exe'), qui fait partie de core python. – Jonesome