FastAPI应用中os.makedirs无法正常工作的问题排查
os.makedirs未创建目录的原因 相对路径解析差异
FastAPI启动时的工作目录可能和你单独运行脚本时不一致。比如你在项目根目录直接跑测试脚本,但用uvicorn或IDE启动FastAPI时,工作目录可能被设置为其他路径,导致相对路径指向了非预期的位置。可以先打印当前工作目录确认:print(os.getcwd()),建议将路径改为绝对路径,比如用os.path.abspath(target_dir)或pathlib.Path(target_dir).resolve()。变量名冲突
你使用的变量名dir是Python内置函数名,虽然语法上允许,但可能引发隐性逻辑错误。把变量名改成target_dir这类自定义名称,避免覆盖内置函数。异步上下文的潜在影响
如果os.makedirs是在FastAPI的异步路由函数中调用的,虽然同步的os模块本身没问题,但部分场景下异步框架的线程调度可能导致执行异常。可以尝试将同步调用包装到线程中执行:
import asyncio await asyncio.to_thread(os.makedirs, target_dir, exist_ok=True)
路径字符串的转义/特殊字符问题
检查路径字符串是否存在转义错误(比如Windows下反斜杠未转义)或包含不可见字符。可以用print(repr(target_dir))打印路径的原始字符串,确认路径格式是否正确。进程用户权限的隐性差异
即使你确认了目录权限,FastAPI进程的运行用户可能和你单独执行脚本的用户不同(比如用systemd、Docker启动时的用户),导致实际权限不足。可以打印当前进程用户信息确认:import getpass; print(getpass.getuser())。
内容的提问来源于stack exchange,提问作者NFeruch - FreePalestine

