在复杂应用程序的上下文中,我需要导入用户提供的"脚本".理想情况下,脚本应该
def init():
blah
def execute():
more blah
def cleanup():
yadda
所以我就
import imp
fname, path, desc = imp.find_module(userscript)
foo = imp.load_module(userscript, fname, path, desc)
foo.init()
然而,正如我们所知,只要运行load_module
次,用户的脚本就是executed.
def init():
blah
yadda
屈服于我一看完 playbook 就被调用的yadda
部分.
我需要的是一种方法:
- 首先判断它是否有init()、execute()和cleanup()
- 如果它们存在,一切都很好
- 如果它们不存在,就抱怨吧
- 不要运行任何其他代码,或者至少在我知道没有init()之前不要运行
通常情况下,我会强制使用相同的老if __name__ == '__main__'
技巧,但我对用户提供的脚本几乎没有控制权,所以我正在寻找一个相对轻松的解决方案.我见过各种复杂的技巧,包括解析脚本,但没有什么真正简单的.我很惊讶它不存在..或者也许我没有得到什么.
谢谢