我创建了一个烧瓶应用程序,并希望运行服务器($ 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()
再次调用函数(希望它只运行一次)。
为什么会这样?
由于
答案 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代码。