首页 > 解决方案 > 如果进程没有被杀死,subprocess32.check_output 不会引发 TimeoutExpired

问题描述

使用 subprocess32 的方法时,即使时间过去了,进程也没有完成check_output,有时也没有引发。TimeoutExpired

查看 的源代码subprocess32,我偶然发现了以下代码:

 try:
    output, unused_err = process.communicate(timeout=timeout)
except TimeoutExpired:
    process.kill()
    output, unused_err = process.communicate()
    raise TimeoutExpired(process.args, timeout, output=output)

似乎如果进程不会响应 SIGKILL 问题process.kill(),解释器可能会无限期地挂起process.communicate(),因此不会像我预期的那样引发TimeoutExpired异常。

我在这里想念什么?是否有更好的做法来调用进程,同时确保在必要时持续抛出超时?

谢谢!

标签: pythonsubprocesstimeout

解决方案


推荐阅读