如何从未定义 "def main" 的 Python 文件中导入主函数?
How to import the main function from a Python file not defining "def main" in it?
我正在编写一个 Python (3.5) 模块,我想在其中使用来自开源项目的现有 Python 模块。我要导入的模块包含:
- 几个函数
- 一条
if __name__ == '__main__':
条指令
但不包含 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
虽然我建议您不要这样做,您真的应该只编辑以包含一个主要功能。
我正在编写一个 Python (3.5) 模块,我想在其中使用来自开源项目的现有 Python 模块。我要导入的模块包含:
- 几个函数
- 一条
if __name__ == '__main__':
条指令
但不包含 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
虽然我建议您不要这样做,您真的应该只编辑以包含一个主要功能。