J'essaye de tuer un processus (en particulier iChat). Sur la ligne de commande, j'utilise ces commandes:
ps -A | grep iChat
Ensuite:
kill -9 PID
Cependant, je ne sais pas exactement comment traduire ces commandes en Python.
En supposant que vous êtes sur une plate-forme de type Unix (donc qui ps -A
existe),
>>> import subprocess, signal
>>> import os
>>> p = subprocess.Popen(['ps', '-A'], stdout=subprocess.PIPE)
>>> out, err = p.communicate()
vous donne ps -A
la sortie de la out
variable (une chaîne). Vous pouvez le décomposer en lignes et faire une boucle dessus ...:
>>> for line in out.splitlines():
... if 'iChat' in line:
... pid = int(line.split(None, 1)[0])
... os.kill(pid, signal.SIGKILL)
...
(vous pouvez éviter d'importer signal
et utiliser à la 9
place de signal.SIGKILL
, mais je n'aime pas particulièrement ce style, donc je préfère utiliser 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 recherchez 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 en tête un système spécifique de type Unix uniquement (ne nécessitant aucune portabilité multiplateforme), cela peut être possible; en particulier, sous Linux, le /proc
pseudo-système de fichiers est très utile. Mais vous devrez clarifier vos exigences exactes avant que nous puissions vous aider sur cette dernière partie.
psutil peut trouver le processus par son nom et le tuer:
la source
psutil
package, qui peut ne pas être présent sur la machine cible.Si vous devez considérer le cas Windows pour être multiplateforme, essayez ce qui suit:
la source
Si vous avez killall:
Ou:
la source
pkill
, même si je pense que je suis la seule personne au monde à l'utiliser à la place dekillall
killall java
?pkill
parce que le seul dontkillall
j'étais au courant était celui "tuer tout".cela a fonctionné pour moi dans windows 7
la source
Vous pouvez essayer ceci. mais avant de devoir installer psutil en utilisant
sudo pip install psutil
la source
Le code ci-dessous supprimera tous les programmes orientés iChat:
la source
Vous pouvez utiliser
pkill <process_name>
dans un système unix pour tuer le processus par son nom.Ensuite, le code python sera:
la source
Si vous voulez tuer le (s) processus (s) ou cmd.exe portant un (des) titre (s) particulier (s).
J'espère que ça aide. Leur pourrait être de nombreuses meilleures solutions à la mienne.
la source
vous pouvez utiliser le module WMI pour faire cela sur Windows, bien que ce soit beaucoup plus compliqué que ce à quoi vous êtes habitués à Unix;
import WMI
prend beaucoup de temps et il y a une douleur intermédiaire pour arriver au processus.la source
Pour moi, la seule chose qui a fonctionné est:
Par exemple
la source
9 représente le signal SIGKILL. Vous pouvez donc utiliser
KILL
à la place de 90r
la source
la source
La réponse Alex Martelli ne fonctionnera pas dans Python 3 car
out
sera un objet octets et entraînera donc unTypeError: a bytes-like object is required, not 'str'
lors du testif 'iChat' in line:
.Citations de la documentation des sous-processus :
Pour Python 3, ceci est résolu en ajoutant le
text=True
(> = Python 3.7) ou l'universal_newlines=True
argument auPopen
constructeur.out
sera alors renvoyé sous forme d'objet chaîne.Vous pouvez également créer une chaîne en utilisant la méthode decode () d'octets.
la source
la source