Terminate a python script from another python script

Solution 1:

You could get your own PID (Process Identifier) through

import os
os.getpid()

and to kill a process in Unix

import os, signal
os.kill(5383, signal.SIGKILL)

to kill in Windows use

import subprocess as s
def killProcess(pid):
    s.Popen('taskkill /F /PID {0}'.format(pid), shell=True)

You can send the PID to the other programm or you could search in the process-list to find the name of the other script and kill it with the above script.

I hope that helps you.

Solution 2:

You're looking for the subprocess module.

import subprocess as sp

extProc = sp.Popen(['python','myPyScript.py']) # runs myPyScript.py 

status = sp.Popen.poll(extProc) # status should be 'None'

sp.Popen.terminate(extProc) # closes the process

status = sp.Popen.poll(extProc) # status should now be something other than 'None' ('1' in my testing)

subprocess.Popen starts the external python script, equivalent to typing 'python myPyScript.py' in a console or terminal.

The status from subprocess.Popen.poll(extProc) will be 'None' if the process is still running, and (for me) 1 if it has been closed from within this script. Not sure about what the status is if it has been closed another way.