我想编写一个从脚本启动的最小FastAPI静态文件服务器,该脚本允许您指定要在命令行上共享的目录。在FastAPI文档中的示例之后,我写了这个。
import uvicorn
from fastapi import FastAPI
from fastapi.staticfiles import StaticFiles
server = FastAPI()
if __name__ == "__main__":
    import sys
    directory = sys.argv[1]
    server.mount("/static", StaticFiles(directory=directory), name="static")
    uvicorn.run(app="my_package:server")如果我使用参数/my/directory运行这个目录中包含的file.txt,我希望能够在URL http://localhost:8000/static/file.txt上下载file.txt,但是这会返回一个HTTP404。
如何编写这个最小的静态文件服务器脚本?
发布于 2022-11-23 22:40:13
当您调用uvicorn.run(app="my_package:server")时,它实际上启动了一个单独的进程,其中my_package是导入的。因此,if __name__ == "__main__":中的所有内容都不会在uvicorn进程中运行,因此您的目录将永远不会被挂载。
一个可能的解决方案是从一个环境变量获取目录,该变量是从一个小型bash脚本中设置的:
from fastapi import FastAPI
from fastapi.staticfiles import StaticFiles
server = FastAPI()
directory = os.getenv("DIRECTORY")
server.mount("/static", StaticFiles(directory=directory), name="static")start.sh
#!/usr/bin/env bash
DIRECTORY=$1 uvicorn mypackage:serverhttps://stackoverflow.com/questions/74553491
复制相似问题