如何从未定义 "def main" 的 Python 文件中导入主函数?

How to import the main function from a Python file not defining "def main" in it?

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

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

因为没有实际的main功能,所以我无法通过import module的方式导入并作为module.main()使用。虽然我确实找到了通过命令 os.system()subprocess.Popen() 将其作为脚本单独执行的选项,但实际上我正在寻找一种方法使此调用成为我代码的组成部分。

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

我已经经历过其他非常相似的问题,例如 this and this that could not solve my issue. This answer 让我觉得我正在尝试做的事情并不微不足道。

有什么办法吗?

当您第一次 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

虽然我建议您不要这样做,您真的应该只编辑以包含一个主要功能。