假设我有两个python脚本A.py
和B.py
。我正在寻找一种方式来从A内以这样的方式运行B中:从另一个python程序运行python程序(有一定的要求)
- 乙认为这是
__main__
(所以在B中的if __name__=="__main__"
块代码将运行) - B是不实际(例如,它不覆盖sys.modules中的
"__main__"
条目) - B中引发的异常传播给A(即,可能会被A中的
except
子句捕获)。 - 这些例外,如果不抓住,内B.
我已经试过各种方法产生正确的回溯引用的行号,但没有一个似乎满足我的所有要求。使用工具从子模块
- 意味着B中的异常不会传播到A.
execfile("B.py", {})
运行B,但并不认为这是主要的。execfile("B.py", {'__name__': '__main__'})
使B.py认为它是主要的,但它似乎也搞砸了异常追溯打印,以便追溯引用A中的行(即真实的__main__
)。- 使用
imp.load_source
与__main__
因为几乎工程,但它实际上是修改sys.modules中,从而践踏的__main__
现有值的名称有什么办法让我想要什么?我之所以这样做是因为我正在对现有的库进行一些清理,这个库没有真正的测试套件,只是一组产生特定输出的“示例”脚本。为了确保我的清理不会影响库执行这些示例的能力,所以我想从我的测试套件中运行每个示例脚本。我希望能够在这些脚本中看到异常测试脚本使测试脚本可以报告失败类型,而不是仅在示例脚本引发一些异常时报告通用的SubprocessError。)
有趣的解决方案。我怀疑(并希望..)我会永远需要它,但python允许和启用的东西有点酷。 – 2012-07-06 11:23:46