我正在写一个启动subprocess的Python程序(使用Popen)。 我正在读取subprocess的stdout,做一些过滤,并写入主进程的stdout。
当我杀死主进程(cntl-C)时,subprocess继续运行。 我如何杀死subprocess呢? 子过程就好像跑了很长时间。
上下文:我一次只启动一个subprocess,我正在过滤它的stdout。 用户可能决定中断尝试其他的东西。
我是python的新手,我使用windows,所以请温和。
Windows没有信号,所以你不能使用信号模块。 但是,按Ctrl-C时仍然可以捕获KeyboardInterrupt异常。
像这样的事情应该让你去:
import subprocess try: child = subprocess.Popen(blah) child.wait() except KeyboardInterrupt: child.terminate()
子进程.Popen对象有一个kill和一个终止方法(不同的是你发送给进程的信号)。
signal.signal允许您安装信号处理程序,您可以在其中调用子程序的kill方法。
你可以使用python atexit
模块。
例如:
import atexit def killSubprocess(): mySubprocess.kill() atexit.register(killSubprocess)