2017-07-30 50 views
0

請幫我找到我的問題的解決方案。 我有一個文件main.py問題導入變量

def arguments_reader(): 
    parser = argparse.ArgumentParser(description='test') 
    parser.add_argument('--bindhost', dest='host', default='localhost', 
         help='Hostname to bind (default:localhost)') 
    args = parser.parse_args() 
    return args.host 

if __name__ == "__main__": 
    action = arguments_reader() 
.... 

和第二個test.py

​​

我怎樣才能從第一個文件變量主機? P.S.我正在運行main.py P.S.S.我不能在main.py運行測試類(它是由其他的文件中運行),所以我不能將它張貼類似的說法,只有在test.py進口,main.py文件

感謝

+0

那麼是什麼阻止你導入它?你需要在'__init __()'中顯式地定義你的參數,例如'def __init __(self,host)'。然後你可以在'main.py'中構造一個實例,例如't = TEST(action)' – AChampion

+0

從'main.py'中導入'argument_reader'函數,調用該函數並將結果賦給某個變量。然後將變量名傳遞給'TEST'的構造函數。或者,如果你想將'TEST'導入到'main.py'中,請執行@AChampion所說的話。 –

+0

請給[mcve]。顯示所有必要的代碼來說明你在做什麼。任何人都應該能夠複製並粘貼你的代碼,然後運行它,並獲得你所詢問的完全相同的結果。 –

回答

1

你可以通過主機作爲參數傳遞給測試類的構造函數,並創建實例,一旦你用的參數解析完成..你的文件應該喜歡這個

main.py

from test import TEST 
import argparse 

..... 

def arguments_reader(): 
    parser = argparse.ArgumentParser(description='test') 
    parser.add_argument('--bindhost', dest='host', default='localhost', 
        help='Hostname to bind (default:localhost)') 
    args = parser.parse_args() 
    return args.host 

if __name__ == "__main__": 
    action = arguments_reader() 
    test = TEST(action) 
..... 

ANS test.py了

class TEST(object): 

    def __init__(self, host): 
     print(host) 
0

可以導入main.py

import main 

class TEST(object): 

    def __init__(self): 
     self.host = main.arguments_reader() 

有一件事要小心的是,如果你使用的是unittestUnitTest.main()消耗命令行參數。