FastAPI 添加额外参数来运行 Uvicorn

问题描述 投票:0回答:1

我目前正在使用以下 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-3.x arguments fastapi argparse uvicorn
1个回答
0
投票

您可以通过在 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
© www.soinside.com 2019 - 2024. All rights reserved.