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"])