SFTP访问文件夹后Python脚本pygame音频加载错误的排查求助
排查SFTP访问后Python脚本无法加载音频文件的问题
先确认脚本本身的潜在问题
- 替换相对路径为绝对路径:
脚本里用'Shutter.wav'这种相对路径,依赖当前工作目录(CWD)。SFTP访问文件夹时,可能会改变脚本运行时的CWD,导致找不到文件。直接写绝对路径,比如'/home/pi/your_project_dir/Shutter.wav',彻底规避路径解析问题。 - 检查脚本换行符格式:
每次出现问题后,执行file your_script.py查看文件格式。如果输出包含CRLF line terminators,说明脚本被转成了Windows换行格式,这会导致Python解析路径时出错。可以:- 在脚本第一行添加
#!/usr/bin/env python3 - 执行
chmod +x your_script.py将脚本设为可执行
这样能减少SFTP客户端自动转换换行符的概率。
- 在脚本第一行添加
- 排查隐含特殊字符:
用cat -A your_script.py查看脚本内容,重点看加载音频的那一行末尾是否有^M(Windows换行符标记)或其他不可见字符。这些字符会干扰路径解析,导致pygame无法识别文件。
解决SFTP客户端的自动修改问题
- 关闭自动换行符转换:
所有主流SFTP客户端(FileZilla、WinSCP、Cyberduck等)默认会把文本文件的LF换行符转成CRLF。找到客户端设置里的“文本模式自动转换”或“ASCII传输模式”选项,直接关闭,改成二进制模式传输所有文件(包括脚本)。 - 锁定脚本文件权限:
在树莓派上执行chmod 444 your_script.py,把脚本设为只读。即使SFTP客户端有自动修改的逻辑,也无法改写文件内容。
验证流程
- 先用
dos2unix your_script.py修复脚本,确保能正常运行。 - 按上述方法修改路径为绝对路径,关闭SFTP客户端的自动转换功能。
- 用SFTP访问目标文件夹后,再次运行脚本,检查是否仍出现
pygame.error。 - 如果问题依旧,执行
ls -l Shutter.wav确认音频文件的权限,确保脚本运行用户(比如pi用户)有读取权限。
内容的提问来源于stack exchange,提问作者Roman Holtwick
相关产品推荐
相关产品推荐

