我想訪問在子進程中運行的python程序的回溯。子進程子追蹤
The documentation說:的my_sub_program.py
Exceptions raised in the child process, before the new program has started to execute, will be re-raised in the parent. Additionally, the exception object will have one extra attribute called child_traceback, which is a string containing traceback information from the child’s point of view.
內容:的my_main_program.py
raise Exception("I am raised!")
內容:
import sys
import subprocess
try:
subprocess.check_output([sys.executable, "my_sub_program.py"])
except Exception as e:
print e.child_traceback
如果我跑my_main_program.py
,我得到以下錯誤:
Traceback (most recent call last):
File "my_main_program.py", line 6, in <module>
print e.child_traceback
AttributeError: 'CalledProcessError' object has no attribute 'child_traceback'
如何在不修改子進程程序代碼的情況下訪問子進程的回溯?這意味着,我想避免在我的整個子程序代碼中添加一個大的try/except
子句,而是處理來自主程序的錯誤日誌記錄。
編輯:sys.executable
應該可以用與運行主程序的解釋器不同的解釋器替換。
Doc說「在新程序開始執行之前」,在你的情況下,新程序執行時引發了異常,因此沒有'child_traceback'。一旦新程序運行,您需要捕獲'CalledProcessError'異常,並執行以下操作:http://stackoverflow.com/questions/24849998/how-to-catch-exception-output-from-python-subprocess-check使用'CalledProcessError.output'輸出 – mguijarr
在我的示例中,'CalledProcessError.output'只捕獲標準輸出,但不捕獲異常的回溯。 – schreon
這可能是因爲輸出是在'stderr'上發送的。看看我給你的問題上面的鏈接的答案更多詳細信息 – mguijarr