【问题标题】:Python subprocess module: Catch exception from a child process in parent processPython子进程模块:从父进程中的子进程捕获异常
【发布时间】:2017-12-29 19:38:32
【问题描述】:
如何在父进程的子进程中捕获异常。子进程是使用 Python 的 subprocess.Popen() 创建的,如下所示:
division_by_zero.py
print(1/0)
父.py
import subprocess
subprocess.Popen(['python', 'division_by_zero.py'])
子进程引发异常
ZeroDivisionError: 整数除以零或取模
。如何在父进程中捕获它?
【问题讨论】:
标签:
python
exception
process
subprocess
【解决方案1】:
我认为没有办法直接“捕获”该异常。但我自己才开始研究这个。
您可以使用管道来获得类似的结果,如下所示:
在parent.py
import subprocess
process = subprocess.Popen(['python', 'division_by_zero.py'], stderr=subprocess.PIPE)
stdout, stderr = process.communicate()
errorText = stderr.decode()
if 'ZeroDivisionError' in errorText:
print('Zero divison error encountered while executing subprocess')
在division_by_zero.py
print(0/1)
诀窍是我们将所有错误输出重定向到我们的进程和子进程之间的管道。也可以通过将stdout=subprocess.PIPE 传递给.Popen() 函数以类似的方式捕获正常输出。
受此答案的启发:
https://stackoverflow.com/a/35633457/13459588