使用argparse启动烧瓶服务器

时间:2015-11-03 09:55:24

标签: python flask argparse

我创建了一个烧瓶应用程序,并希望运行服务器($ python run.py)但在此之前想要在运行$ python run.py --init时执行一些基本的数据库任务

代码(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()再次调用函数(希望它只运行一次)。

为什么会这样?

由于

1 个答案:

答案 0 :(得分:2)

你的剧本缺少这样的东西:

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代码。