2016-07-28 25 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

相關問題