Python 子进程模块:从父进程中的子进程捕获异常



如何在父进程中捕获子进程的异常。子进程是使用 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

最新更新