【问题标题】:How can I execute __main__ from another Python module? [duplicate]如何从另一个 Python 模块执行 __main__ ? [复制]
【发布时间】:2016-12-03 08:39:37
【问题描述】:

我有一个我不是维护者的 python 文件,看起来像下面的代码。如果不修改代码以将所有内容放在 if __name__ 下,有没有办法从另一个模块导入它,以便我可以执行它并以编程方式传递参数?

import configargparse

if __name__ == '__main__':
    args = get_args()
    #more code to execute...

【问题讨论】:

  • 绝对是重复的,谢谢。读完之后,答案似乎是不可能的。
  • 不行,除非模块只是使用if __name__ == '__main__'来调用main()函数,很遗憾你做不到。

标签: python


【解决方案1】:

在大多数情况下,你不能。该代码没有以有用的方式公开。如果您能够修改源文件,典型的解决方案是将所有该代码移出 if __name__ == '__main__' 块并将其放入 main() 函数中。

可能使用execfile 函数来做你想做的事,如here 所述,但由于多种原因,这是一个丑陋的解决方案(import 声明仅用于副作用,因为您在作弊并使用它来获取文件名,并且模块级变量在引用为 module.var 时可能不会像您预期的那样运行,如该页面上的一些 cmets 所述) .

即使在这个例子中,也不清楚是否有一种有用的方法来传递参数。我想你可以明确设置sys.argv,但是看看这已经闻到了多么骇人听闻的味道......

【讨论】:

  • 我可以通过启动命令 shell 来实现它,但我希望有一个更干净的解决方案,而无需触及不属于我的代码。不过还是谢谢。
  • 使用runpy docs.python.org/3/library/runpy.html怎么样?看起来它就是为此目的而设计的
  • @MarkAdamson 我有一个使用import runpy; runpy.run_module('other_main_module', run_name='__main__')的简单示例
猜你喜欢
  • 1970-01-01
  • 2021-11-04
  • 2012-02-06
  • 2014-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-15
  • 1970-01-01
相关资源
最近更新 更多