当没有更多的输出要读取时,我使用自定义超时异常来绕过iter(subprocess.Popen.stdout.readline,'')阻塞,但是异常没有被正确捕获。这是一个代码,它有一个主进程和一个单独的进程(用multiprocessing.Process实现),其中任何一个都可以发生超时。,但是在子进程中,无论何时引发超时,它都不会被捕获,尽管使用了(我相信)适当的标准语法:
from subprocess i
然后按下控制-C,我把这个打印到控制台上:CHILD stdout: Hi there
CHILD stderr: Traceback (most recent(在子进程中运行)接收到'^C‘键盘事件。但是,我更喜欢退出子进程,而不是在键盘中断上崩溃。我为尝试了多种组合,包括[undefined,'pipe','pipe'] (不工作)和['ignore',
terminated before this subprocess process.kill()
但是,如果我使用下面的python示例程序,它似乎会被困在process.poll()或process.stdout.readline()上,直到程序完成为止。我认为这是stdout.readline(),因为如果我将字符串的数量从10增加到10000 (在示例程序中),或者在每次打印之后添加一个sys.stdout.flush()