如何在父进程中捕获子进程的异常。子进程是使用 Python 的子进程创建的。Popen(( 像这样:
division_by_zero.py
print(1/0)
parent.py
import subprocess
subprocess.Popen(['python', 'division_by_zero.py'])
子进程引发异常
零除误差:整数除法或取模为零
.如何在父进程中捕获它?
我认为没有办法直接"捕获"该异常。但我自己才开始研究这个。
您可以使用管道获得类似的结果,如下所示:
在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