当python进程被杀死时杀死subprocess?

我正在写一个启动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)