【发布时间】:2018-05-11 20:17:24
【问题描述】:
我正在编写一个 Python (3.5) 模块,我想在其中使用来自开源项目的现有 Python 模块。我要导入的模块包含:
- 几个功能
-
if __name__ == '__main__':指令
但不包含def main(args) 函数。
由于没有实际的main 函数,我无法通过import module 将其导入并用作module.main()。虽然我确实找到了通过命令os.system() 和subprocess.Popen() 将其作为脚本单独执行的选项,但我实际上正在寻找一种方法来使这个调用成为我代码中不可或缺的一部分。
我知道我可以在原始代码中自己添加def main() 部分,但由于它来自一个开源项目,我正在寻找保持不变的方法,这样我就不需要自己维护它如果它得到更新。
我遇到了其他非常相似的问题,例如 this 和 this 无法解决我的问题。 This answer 让我觉得我正在努力做的事情并非微不足道。
有什么办法吗?
【问题讨论】:
-
理论上,您可以编写某种讨厌的导入钩子来重写 ast 以将
if __name__ == '__main__'转换为函数。在实践中,这可能是真正奇怪的错误和维护噩梦的秘诀。您是否考虑过仅提交拉取请求以添加main函数? -
如果模块是这样写的,那么作者完全有可能认为
if __name__ == '__main__':块内的代码是模块初始化代码,不能多次运行。 -
@LarryLustig,这可能是真的。我希望找到一个大的快捷方式并尽可能多地提取现有代码,但如果我这样想,如果我调用 that 脚本/函数 all,我可能不会做正确的事情时间。
标签: python python-import main