如何从未定义" def main"的Python文件中导入main函数。在里面?

时间:2018-05-11 20:17:25

标签: python python-import main

我正在编写一个Python(3.5)模块,我希望在这个模块中使用来自开源项目的现有Python模块。我要导入的模块包含:

  • 几个职能
  • if __name__ == '__main__':指令

但不包含def main(args)函数。

由于没有实际的main功能,我无法通过import module导入它并将其用作module.main()。虽然我确实找到了通过命令os.system()subprocess.Popen()分别将其作为脚本执行的选项,但实际上我正在寻找一种方法使这个调用成为我代码中不可或缺的一部分。

我知道我可以在原始代码中添加def main()部分,但因为它来自一个开源项目,我正在寻找方法让它保持不变,所以我不需要如果它得到更新,我自己维护它。

我已经解决了其他非常类似的问题,例如thisthis无法解决我的问题。 This answer让我觉得我想做的事情并非无足轻重。

有没有办法做到这一点?

1 个答案:

答案 0 :(得分:2)

第一次import模块时(与导入函数不同),该模块中的所有代码都会执行。这意味着函数被定义,全局变量被定义等等。我们编写if __name__ == "__main__":块的原因是,在导入模块时,该代码不会执行(它只会执行if name == "main")。如果只是删除if __name__ == "__main__":行并修复缩进,则在导入模块时将执行该代码。以此模块hello.py为例:

def hello_world():
    print("Hello world")
if __name__ == "__main__":
    hello_world()

然后如果我们导入:

import hello
hello_world()

下面的代码将与第一个模块再次为hello.py:

的情况相同
def hello_world():
    print("hello world")
hello_world()

要执行的模块:

import hello

我建议你不要这样做,你真的应该编辑包含一个主要功能。