2016-04-17 13 views
2

Es ist ein Weg, ein anderes Skript in Python zu starten, indem dies zu tun:Wie kann man ein anderes bereits laufendes Skript in Python stoppen?

import os 

os.system("python [name of script].py") 

Wie kann ich einen anderen bereits laufenden Skript stoppen? Ich möchte das Skript mit dem Namen stoppen.

+0

Sie können das Skript mithilfe der PID oder Name töten, können Sie ein wenig mehr Kontext hinzufügen? –

+0

@PadraicCunningham Ich möchte mit dem Namen –

+0

aufhören, welches Betriebssystem verwenden Sie? –

Antwort

3

Es ist üblicher, das andere Skript zu importieren und dann seine Funktionen und Methoden aufzurufen.

Wenn das nicht für Sie funktioniert, z. Das andere Skript wird nicht so geschrieben, dass es importiert werden kann. Dann können Sie das Modul subprocess verwenden, um einen anderen Prozess zu starten.

import subprocess 

p = subprocess.Popen(['python', 'script.py', 'arg1', 'arg2']) 
# continue with your code then terminate the child 
p.terminate() 

Es gibt viele Möglichkeiten, den Kindprozess zu steuern und mit ihm zu interagieren, z. Sie können seine stdout und sterr erfassen und senden Sie die Eingabe. Siehe die Popen() Dokumentation.

2

Wenn Sie starten das Skript nach mhawkes Vorschlag ist es eine bessere Option, aber Ihre Frage zu beantworten, wie namentlich ein bereits begonnen Skript töten Sie pkill und subprocess.check_call verwenden können:

from subprocess import check_call 
import sys 

script = sys.argv[1] 


check_call(["pkill", "-9", "-f", script]) 

Genau das passieren Namen zu töten:

[email protected]:~$ cat kill.py 
from subprocess import check_call 
import sys 

script = sys.argv[1] 


check_call(["pkill", "-9", "-f", script]) 


[email protected]:~$ cat test.py 
from time import sleep 

while True: 
    sleep(1) 
[email protected]:~$ python test.py & 
[60] 23361 
[email protected]:~$ python kill.py test.py 
[60] Killed    python test.py 
Killed 

, dass der Prozess mit einem SIGKIll tötet, wenn Sie das -9 entfernen beenden möchten:

[email protected]:~$ cat kill.py 
from subprocess import check_call 
import sys 

script = sys.argv[1] 

check_call(["pkill", "-f", script]) 


[email protected]:~$ python test.py & 
[61] 24062 
[email protected]:~$ python kill.py test.py 
[61] Terminated    python test.py 
Terminated 

Das wird eine SIGTERM senden. Termination-Signals