通过SSH连接树莓派未执行代码,如何排查Kivy应用中subprocess调用故障
问题定位排查步骤
- 首先捕获命令执行返回码:
subprocess.call()会返回命令的退出状态码,成功执行为0,非0代表命令本身执行失败。你可以先打印返回值确认执行状态,参考代码:
ret = subprocess.call(f"ssh pi@{raspberry_ip} python {file_path}", shell=True) print(f"命令执行返回码:{ret}")
- 开启SSH调试日志定位连接问题:在ssh指令中加入
-v参数输出详细的连接、校验流程日志,修改命令为ssh -v pi@{raspberry_ip} python {file_path},运行后查看日志即可判断是IP不可达、SSH端口不通、密钥/密码校验失败这类连接问题,还是树莓派侧python命令不存在、目标脚本路径错误这类执行问题。 - 校验命令字符串拼接是否正确:如果你的命令字符串没有加
f前缀(f-string)或者调用.format()方法完成变量替换,{raspberry_ip}、{file_path}会作为普通字符串传递,不会被替换成实际值。你可以先把拼接完成的最终命令打印出来,复制到本地终端直接执行,验证命令本身的正确性。 - 检查树莓派侧的运行记录:登录树莓派查看
/var/log/auth.log日志,确认对应时间点有没有SSH登录请求,判断请求是否成功到达树莓派;如果有登录记录,可在你要执行的Python脚本中增加本地日志写入逻辑(比如脚本启动时向/tmp/script_run.log写入当前时间和启动标记),确认脚本是否被触发执行。 - 确认SSH免密配置是否完成:如果运行Kivy应用的设备没有配置到树莓派的SSH公钥免密登录,ssh命令会在后台静默等待输入密码,表现为无报错也无执行结果。你可以提前配置好公钥信任,或者使用
sshpass传递密码,避免命令阻塞在密码输入环节。
内容的提问来源于stack exchange,提问作者Ded Meme
相关产品推荐
相关产品推荐

