Reputation:
I am writing a python program that lauches a subprocess (using Popen). I am reading stdout of the subprocess, doing some filtering, and writing to stdout of main process.
When I kill the main process (cntl-C) the subprocess keeps running. How do I kill the subprocess too? The subprocess is likey to run a long time.
Context: I'm launching only one subprocess at a time, I'm filtering its stdout. The user might decide to interrupt to try something else.
I'm new to python and I'm using windows, so please be gentle.
Upvotes: 6
Views: 4603
Reputation: 1428
You can use python atexit
module.
For example:
import atexit
def killSubprocess():
mySubprocess.kill()
atexit.register(killSubprocess)
Upvotes: 0
Reputation: 10556
subprocess.Popen objects come with a kill and a terminate method (differs in which signal you send to the process).
signal.signal allows you install signal handlers, in which you can call the child's kill method.
Upvotes: 0
Reputation: 51
Windows doesn't have signals, so you can't use the signal module. However, you can still catch the KeyboardInterrupt exception when Ctrl-C is pressed.
Something like this should get you going:
import subprocess
try:
child = subprocess.Popen(blah)
child.wait()
except KeyboardInterrupt:
child.terminate()
Upvotes: 5