2015-11-03 127 views
1

我創建了一個燒瓶應用程序並希望運行的服務器($ python run.py),但在這之前要做上運行$ python run.py --init使用argparse啓動燒瓶服務器

代碼(run.py)一些基本的數據庫任務:

def init(): 
    do_dbstuff() 
    start_server() 

def do_dbstuff(): 
    # doing db stuff 

def start_server(): 
    app.run(host='127.0.0.1', port=8080, debug=True) 

parser = argparse.ArgumentParser(description="Welcome to my server", prog="Simpleserver") 

parser.add_argument('--init', dest='run_init', action='store_true', help="does db stuff and starts the server") 
parser.add_argument('--dbstuff', dest='run_do_dbstuff', action='store_true', help="does db stuff") 

args = parser.parse_args() 

if args.run_init: 
    init() 
elif args.run_do_db_stuff: 
    do_dbstuff() 
else: 
    start_server() 

上面的代碼工作,但問題是當服務器被啓動init()函數被再次調用(希望它只運行一次)。

這是爲什麼發生?

感謝

+0

對於調試,我會在解析後立即執行「print args」。如果這是正確的,並且不重複,它排除任何'argparse'問題。 – hpaulj

+0

是啊,那裏沒有問題,我得到所有參數..:| – Deepak

+0

某些服務器在編輯應用程序後重新啓動。 – hpaulj

回答

1

是不是你的腳本缺少這樣的事情:

if __name__ == "__main__": 
    args = parser.parse_args() 
    if args.run_init: 
     init() 
    elif args.run_do_db_stuff: 
     do_dbstuff() 
    else: 
     start_server() 

恕我直言,您有進口「run.py」另一個Python文件,這就是爲什麼你的函數運行兩次。請記住,作爲模塊導入時,會執行python代碼。

+0

你對使用'if __name __...'行是正確的,但我沒有導入run.py任何地方,我在問題中提到,我沒有看到任何原因爲什麼這會成爲函數被調用兩次的原因。此外,我檢查,它不能解決我的問題。 – Deepak

+0

它可能是因爲它在這個線程中說:這是python的工作原理: http://stackoverflow.com/questions/6523791/why-is-python-running-my-module-when-i-進口它和如何-DO-一站式它 – Morreski