¿Cómo detener otro script que ya se ejecuta en python?

Hay una manera de comenzar otro script en python haciendo esto:

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

Entonces, ¿cómo puedo detener otra secuencia de comandos ya en ejecución? Me gustaría detener la secuencia de comandos utilizando el nombre.

Es más habitual importar el otro script y luego invocar sus funciones y métodos.

Si eso no funciona para usted, por ejemplo, el otro script no está escrito de tal manera que sea propicio para ser importado, entonces puede usar el módulo de subprocess para iniciar otro proceso.

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

Hay muchas formas posibles de controlar e interactuar con el proceso hijo, por ejemplo, puede capturar su stdout y su sterr, y enviar su entrada. Consulte la documentación de Popen() .

Si inicia la secuencia de comandos según la sugerencia de mhawkes, es una opción mejor, pero para responder a su pregunta de cómo eliminar una secuencia de comandos iniciada por nombre, puede usar pkill y subprocess.check_call :

 from subprocess import check_call import sys script = sys.argv[1] check_call(["pkill", "-9", "-f", script]) 

Solo pasa el nombre para matar:

 padraic@home:~$ cat kill.py from subprocess import check_call import sys script = sys.argv[1] check_call(["pkill", "-9", "-f", script]) padraic@home:~$ cat test.py from time import sleep while True: sleep(1) padraic@home:~$ python test.py & [60] 23361 padraic@home:~$ python kill.py test.py [60] Killed python test.py Killed 

Eso mata el proceso con un SIGKIll , si quieres terminar elimina el -9:

 padraic@home:~$ cat kill.py from subprocess import check_call import sys script = sys.argv[1] check_call(["pkill", "-f", script]) padraic@home:~$ python test.py & [61] 24062 padraic@home:~$ python kill.py test.py [61] Terminated python test.py Terminated 

Eso enviará un SIGTERM . Señales de terminación

Simplemente ingrese el nombre del progtwig, NO la ruta a su script. así sería

 check_call(["pkill", "-f", "MotionDetector.py"])