"""后端 uvicorn 启动入口(规避 PowerShell wildcard 展开问题)。 CHANGE 2026-05-05 | F1-5a 走查发现:PS 7.6.1 即使用 --% stop-parsing token 仍在某些环境下展开 reload-exclude 的 wildcard,导致 click 报 "extra arguments"。 解决:把所有 wildcard 字符串封装在 Python 内部,ps1 只调本脚本, PowerShell shell 不接触任何 wildcard 字符串。 参数解析:--port N(默认 8000),其他参数硬编码。 """ from __future__ import annotations import argparse import sys import uvicorn def main() -> int: parser = argparse.ArgumentParser() parser.add_argument("--port", type=int, default=8000) parser.add_argument("--host", type=str, default="127.0.0.1") args = parser.parse_args() uvicorn.run( "app.main:app", host=args.host, port=args.port, reload=True, # 业务规则:5 秒 graceful shutdown 失败强杀,避免 reload 卡死 timeout_graceful_shutdown=5, # F1-5a 走查 reload 卡死预防: # tests/__pycache__/.md 改动不应触发 reload(浪费且潜在卡死风险) reload_excludes=[ "tests/*", "**/__pycache__/*", "*.md", ], use_colors=False, ) return 0 if __name__ == "__main__": sys.exit(main())