Ich versuche, einen Prozess (speziell iChat) zu beenden. In der Befehlszeile verwende ich folgende Befehle:
ps -A | grep iChat
Dann:
kill -9 PID
Ich bin mir jedoch nicht ganz sicher, wie ich diese Befehle in Python übersetzen soll.
Angenommen, Sie befinden sich auf einer Unix-ähnlichen Plattform (so dass diese ps -A
existiert),
>>> import subprocess, signal
>>> import os
>>> p = subprocess.Popen(['ps', '-A'], stdout=subprocess.PIPE)
>>> out, err = p.communicate()
gibt Ihnen ps -A
die Ausgabe in der out
Variablen (eine Zeichenfolge). Sie können es in Zeilen zerlegen und auf ihnen schleifen ...:
>>> for line in out.splitlines():
... if 'iChat' in line:
... pid = int(line.split(None, 1)[0])
... os.kill(pid, signal.SIGKILL)
...
(Sie könnten das Importieren vermeiden signal
und 9
stattdessen verwenden signal.SIGKILL
, aber ich mag diesen Stil einfach nicht besonders, deshalb würde ich die benannte Konstante lieber auf diese Weise verwenden).
Natürlich könnten Sie diese Zeilen viel ausgefeilter verarbeiten, aber dies ahmt nach, was Sie in der Shell tun.
Wenn Sie vermeiden ps
möchten, ist dies auf verschiedenen Unix-ähnlichen Systemen schwierig ( ps
in gewissem Sinne die gemeinsame API zum Abrufen einer Prozessliste). Wenn Sie jedoch nur an ein bestimmtes Unix-ähnliches System denken (das keine plattformübergreifende Portabilität erfordert), ist dies möglicherweise möglich. Insbesondere unter Linux ist das /proc
Pseudo-Dateisystem sehr hilfreich. Sie müssen jedoch Ihre genauen Anforderungen klären, bevor wir in diesem letzten Teil helfen können.
psutil kann den Prozess anhand seines Namens finden und töten:
quelle
psutil
Paket erforderlich ist , das möglicherweise nicht auf dem Zielcomputer vorhanden ist.Wenn Sie den Windows-Fall berücksichtigen müssen, um plattformübergreifend zu sein, versuchen Sie Folgendes:
quelle
Wenn Sie Killall haben:
Oder:
quelle
pkill
, obwohl ich denke, ich bin die einzige Person auf der Welt, die es anstelle vonkillall
killall java
?pkill
weil das einzige, waskillall
mir bewusst war, das "alles töten" war.Das hat bei mir in Windows 7 funktioniert
quelle
Sie können dies versuchen. aber bevor Sie psutil mit installieren müssen
sudo pip install psutil
quelle
Der folgende Code beendet alle iChat-orientierten Programme:
quelle
Sie können
pkill <process_name>
in einem Unix-System verwenden, um den Prozess nach Namen zu beenden.Dann lautet der Python-Code:
quelle
Wenn Sie die Prozesse oder cmd.exe mit einem bestimmten Titel beenden möchten.
Ich hoffe es hilft. Es könnten zahlreiche bessere Lösungen für meine sein.
quelle
Sie können das WMI-Modul verwenden, um dies unter Windows zu tun, obwohl es viel umständlicher ist, als Sie es von Unix-Leuten gewohnt sind.
import WMI
Es dauert lange und es gibt mittlere Schmerzen, um den Prozess zu bekommen.quelle
Für mich hat nur Folgendes funktioniert:
Beispielsweise
quelle
9 repräsentiert das SIGKILL-Signal. Sie können also
KILL
anstelle von 9 verwenden0r
quelle
quelle
Die Antwort von Alex Martelli funktioniert in Python 3 nicht, da
out
sie ein Byte-Objekt ist und daherTypeError: a bytes-like object is required, not 'str'
beim Testen zu einem führtif 'iChat' in line:
.Zitieren aus Teilprozess Dokumentation :
Für Python 3 wird dies gelöst, indem dem Konstruktor das Argument
text=True
(> = Python 3.7) oder hinzugefügt wird . wird dann als String-Objekt zurückgegeben.universal_newlines=True
Popen
out
Alternativ können Sie eine Zeichenfolge mit der Methode decode () von Bytes erstellen.
quelle
quelle