我目前正在使用以下 Uvicorn 命令启动服务器:
main:app --host 0.0.0.0 --port 8003 --access-log
我想添加一个额外的参数
--foo
,使其充当argparse的“store_true”操作,这样我就可以在启动期间选择执行一个函数。
使用Python,使用argparse我可以通过执行命令来实现这一点
main.py --migrate
:
parser = argparse.ArgumentParser(description="Startup")
parser.add_argument("--foo", dest="run_foo", action="store_true")
args = parser.parse_args()
@app.on_event("startup")
async def startup_event():
if args.run_foo:
foo()
其中
app
是我的 FastAPI 实例。然而,当我尝试使用 Uvicorn 执行它时,我得到了 uvicorn: error: unrecognized arguments: main:app --host 0.0.0.0 --port 8003 --access-log
。有办法做到这一点吗?
您可以通过在 python 中调用服务并使用
argparse
来实现一个技巧:
import uvicorn
from fastapi import FastAPI
import argparse
app: FastAPI = FastAPI()
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument('-f', '--foo')
args = parser.parse_args()
foo(args.foo)
#run server
uvicorn.run(app)
然后使用普通的 python 命令运行服务器并传递参数:
python main.py --foo foo