症状
脚本对在 shell 中明明存在的路径抛出 FileNotFoundError。开发时脚本从项目目录启动,相对路径恰好可用。生产环境里服务管理器或容器可能从不同工作目录启动进程,于是同一相对字符串解析到别的绝对位置,打开失败。
诊断
打印 os.getcwd() 与 os.path.abspath 后的路径,确认真实解析位置;用 ls 核对绝对路径是否存在;检查 systemd 的 WorkingDirectory 配置。
python -c "import os; print(os.getcwd()); print(os.path.abspath('data/x.csv'))"
根因
路径字符串是相对的,操作系统按进程工作目录解析。当该目录与文件所在目录不同时,即便文件确实存在,打开也会失败。
修复
把路径锚定到稳定基准:由文件位置或配置的绝对根目录派生,或在服务定义中显式设置工作目录。写入前先创建运行时目录,避免依赖 shell 处于某个特定目录。
验证
重跑确认文件可打开,并打印解析后的绝对路径确认其指向预期位置。路径正确比单次成功更有说服力。
常见陷阱
用 os.chdir 到处切换工作目录会让行为难以预测;优先使用绝对路径或明确的基准目录。