首页 > 解决方案 > 一种优雅的方式来包装另一个脚本以在 python 中进行错误处理并保持相同的命令行 API

问题描述

我有一个脚本,我想用一个错误处理程序包装它,如果脚本失败,它会发送一封电子邮件。

直接的方法是:

try:
  <script imports>
  <script argument parse>
  <script contents>
except Exception as e:
  send_email(e)
  raise

但是我觉得这个解决方案很麻烦。有什么更优雅的方法,同时保持与原始脚本相同的命令行 API?

编辑:如果有一个 API 像这样的解决方案会很棒:python email_wrap.py script_to_run.py <arguments>. 但是,我不确定如何操作命令行参数。

标签: pythonerror-handling

解决方案


(OP在这里)我找到了如何做到这一点:

email_wrap.py

import runpy

try:
    scriptname_to_wrap = sys.argv[1]
    sys.argv = [sys.argv[0]] + sys.argv[2:]

    runpy.run_path(scriptname_to_wrap, run_name="__main__")

except BaseException as e:
    send_email(e)
    raise

推荐阅读