我需要运行一个脚本foo.py,但我还需要在代码之前插入一些调试行来运行foo.py.目前我只是将这些行放入其中foo.py并且我小心不要将其提交给Git,但我不喜欢这个解决方案.
我想要的是一个单独的文件bar.py,我不承诺Git.然后我想跑:
python /somewhere/bar.py /somewhere_else/foo.py
Run Code Online (Sandbox Code Playgroud)
我想要做的是首先运行一些代码行bar.py,然后运行foo.py为__main__.它应该在bar.py线路运行的相同过程中,否则调试线将无济于事.
有没有办法bar.py做到这一点?
有人建议:
import imp
import sys
# Debugging code here
fp, pathname, description = imp.find_module(sys.argv[1])
imp.load_module('__main__', fp, pathname, description)
Run Code Online (Sandbox Code Playgroud)
问题是因为它使用导入机制,我需要在同一个文件夹foo.py上运行它.我不希望这样.我想简单介绍一下foo.py.
另外:解决方案也需要处理.pyc文件.
想象一下,有一个框架提供了一个方法logutils.set_up(),根据一些配置设置日志记录.
应尽早设置日志记录,因为导入库期间发出的警告不应丢失.
由于旧的way(if __name__=='__main__':)看起来很丑,我们使用console_script入口点来注册该main()方法.
# foo/daily_report.py
from framework import logutils
logutils.set_up()
def main():
...
Run Code Online (Sandbox Code Playgroud)
我的问题是logutils.set_up()可能会被调用两次:
想象一下,有一个第二个控制台脚本调用logutils.set_up()和imports daily_report.py.
我可以更改框架代码并set_up()在第二次调用中什么也不做logutils.set_up(),但这感觉很笨拙.我想避免它.
我怎么能确定logutils.set_up()只执行一次?