2016-07-28 23 views
0

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

import configargparse 

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

肯定是重复的,谢谢。看完后看起来答案是不可能的。 – John

+0

不,除非模块只使用'if __name__ =='__main __''来调用'main()'函数,否则不能这么做。 – Aurora0001

回答

1

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

这是可能使用execfile函数来排序的做你想做的,如所描述here,但是这是有很多原因的丑陋的解决方案(在import语句只使用副作用,因为你(如该页面的一些评论中所述),欺骗并使用它来获取文件名,并且模块级别的变量可能不像您期望的那样表现为module.var

即使在这个例子中,还不清楚是否有一种有效的方式来传递参数。我想你可以明确地设置sys.argv,但看看这是多么hacky已经闻到...

+0

我有一种通过启动命令外壳工作,但我希望有一个更清洁的解决方案,而不触及不是我的代码。不过谢谢。 – John

相关问题