代码之家  ›  专栏  ›  技术社区  ›  raggot

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

  •  0
  • raggot  · 技术社区  · 6 年前

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

    • 几个功能
    • A. if __name__ == '__main__': 指示

    但不包含 def main(args) 作用

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

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

    我也遇到过其他类似的问题,比如 this this 这并不能解决我的问题。 This answer 给我的感觉是,我正在努力做的事情并不是微不足道的。

    有没有办法做到这一点?

    1 回复  |  直到 6 年前
        1
  •  2
  •   ChootsMagoots    6 年前

    当你 import 第一次使用模块时(与导入函数不同),该模块中的所有代码都会执行。这意味着函数被定义,全局变量被定义,等等 if __name__ == "__main__": 块是为了在导入模块时,该代码不会执行(它只会执行 if name == " main " )。如果您只需删除 如果\uuu name\uuu=“\ uuu main\uuuuuuu”: 行并修复缩进,该代码将在导入模块时执行。学习本模块 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
    

    我建议您不要这样做,您真的应该编辑以包含一个主函数。