我有一個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