我有一个python文件,我不是那个看起来像下面的代码的维护者。如果不修改代码将所有内容放在if __name__下,是否有一种方法可以从另一个模块导入它,以便我可以执行它并以编程方式传递参数?如何从另一个Python模块执行__main__?
import configargparse
if __name__ == '__main__':
args = get_args()
#more code to execute...
我有一个python文件,我不是那个看起来像下面的代码的维护者。如果不修改代码将所有内容放在if __name__下,是否有一种方法可以从另一个模块导入它,以便我可以执行它并以编程方式传递参数?如何从另一个Python模块执行__main__?
import configargparse
if __name__ == '__main__':
args = get_args()
#more code to execute...
你不能,大部分。该代码没有以有用的方式公开。如果您能够修改源文件,典型的解决方案是将所有代码移出if __name__ == '__main__'
块,并将其放入main()
函数中。
这是可能使用execfile
函数来排序的做你想做的,如所描述here,但是这是有很多原因的丑陋的解决方案(在import
语句只使用副作用,因为你(如该页面的一些评论中所述),欺骗并使用它来获取文件名,并且模块级别的变量可能不像您期望的那样表现为module.var
。
即使在这个例子中,还不清楚是否有一种有效的方式来传递参数。我想你可以明确地设置sys.argv
,但看看这是多么hacky已经闻到...
我有一种通过启动命令外壳工作,但我希望有一个更清洁的解决方案,而不触及不是我的代码。不过谢谢。 – John
肯定是重复的,谢谢。看完后看起来答案是不可能的。 – John
不,除非模块只使用'if __name__ =='__main __''来调用'main()'函数,否则不能这么做。 – Aurora0001