2017-02-02 61 views
1

我試圖解決我在一段代碼,我需要建立上遇到問題。我有一個python模塊,我需要能夠導入並傳遞參數,然後由主模塊進行解析。我已經給出如下:如果__name__ ==「__main__」函數調用

#main.py 
if __name__ == '__main__' 
    sys.argv[] #pass arguments if given and whatnot 
    Do stuff... 

我需要的是增加一個main()功能,可以採取參數(S)和解析它們,然後把它們像這樣:

#main.py with def main() 
def main(args): 
    #parse args 
    return args 

if __name__ == '__main__': 
    sys.argv[] #pass arguments if given and whatnot 
    main(sys.argv) 
    Do stuff... 

總結一下:我需要導入main.py並傳入由main()函數解析的參數,然後將返回的信息提供給if __name_ == '__main_'部分。

編輯 爲了澄清我在做什麼

#hello_main.py 
import main.py 

print(main.main("Hello, main")) 

ALSO我想還是可以透過

$: python main.py "Hello, main" 

調用從外殼main.py從而保持 == main

我問的是甚至可能嗎?我一直在花費今天研究這個問題的更好的部分,因爲如果可能的話,我想盡可能地保留我所提供的main.py模塊。

感謝,

傷害

+1

你有什麼試過?你得到什麼錯誤?請告訴我,你沒有浪費整個一天的寶貴的死亡率「研究」這個問題,而無需運行代碼。 –

+0

'if __name__ =='__main __':'只有當模塊是_called_時,纔會執行部分,而不是導入。 –

+2

使用由sys.argv傳遞的參數在'if __name__ =='__ main __''中調用'main'有什麼問題? –

回答

3

中的模塊文件,你可以寫if __name__ == "__main__"獲得特定的行爲時調用該文件直接,例如通過shell:導入時到另一個文件

#mymodule.py 
import sys 
def func(args): 
    return 2*args 

#This only happens when mymodule.py is called directly: 
if __name__ == "__main__": 
    double_args = func(sys.argv) 
    print("In mymodule:",double_args) 

一則仍可使用的功能:

#test.py 
import mymodule 
print("In test:",mymodule.func("test ")) 

因此,呼籲python test.py將導致"In test: test test ",同時呼籲python mymodule.py hello將導致"In mymodule: hello hello "

+0

這就是我一直在尋找的東西。謝謝。 –

0

如果我理解正確你的問題,你想要做這樣的事情:

# In a file called test.py 
import main 
import sys 

... code 

if __name__ == "__main__": 
    main.main(sys.argv) 
    ... rest of your code 
相關問題