Windows服务器部署FastAPI:无控制台模式运行失败,是否可行?
Windows下无控制台运行Uvicorn服务的解决方案
问题原因
.pyw文件由pythonw.exe执行,该程序不创建控制台窗口,但会关闭标准输入/输出流,而Uvicorn的reload=True(开发重载模式)依赖控制台环境与子进程交互,导致服务无法正常启动。- 同时
pythonw.exe默认不输出日志到文件,所以重定向命令也无法获取错误信息。
可行解决方案
方案1:用生产模式运行(推荐部署时使用)
去掉reload=True参数,该参数仅用于开发阶段代码热重载,部署时不需要。修改run.pyw代码:
import uvicorn uvicorn.run("main:app", host="0.0.0.0", port=8000, reload=False)
直接双击run.pyw,或执行命令:
pythonw.exe run.pyw
此时服务会后台运行,无控制台窗口,API可正常访问。
方案2:开发阶段保留reload模式并隐藏窗口
如果需要在开发时保留热重载功能,可通过VBS脚本隐藏控制台窗口:
- 创建
run.vbs文件,写入以下内容:
Set WshShell = CreateObject("WScript.Shell") WshShell.Run "python run.py", 0, False
- 将原代码保存为
run.py(保留reload=True),双击run.vbs即可隐藏控制台运行服务。
方案3:注册为Windows服务(适合长期后台运行)
使用nssm工具将Uvicorn服务注册为Windows系统服务,实现开机自启、无控制台后台运行:
- 下载
nssm工具后,打开管理员命令提示符,进入nssm所在目录,执行:
nssm install UvicornApp
- 在弹出的配置窗口中设置:
- Path:选择你的Python安装路径,例如
C:\Python310\python.exe - Arguments:填写启动命令,例如
-m uvicorn main:app --host 0.0.0.0 --port 8000 - Working Directory:选择你的项目根目录
- Path:选择你的Python安装路径,例如
- 点击
Install service完成注册,之后可在Windows服务列表中启动、停止该服务。
排查建议
如果仍有问题,先改用python.exe运行脚本(带控制台),查看错误输出:
python run.py
确认服务能正常启动后,再切换到无控制台模式。
内容的提问来源于stack exchange,提问作者Veer Nagda
相关产品推荐
相关产品推荐

