如何在Matlab中为树莓派4生成动态bash命令并调用带参Python脚本
解决方案
需求完全可以实现,以下是具体操作及报错修复方法:
报错问题逐一修复
- 尝试1报错(Python编码错误)修复
该报错与Matlab调用逻辑无关,是Python脚本本身的编码兼容问题:- 打开你要调用的
motor.py/base.py文件,在第一行添加编码声明:
# -*- coding: utf-8 -*-- 调用时优先使用
python3而不是python命令,树莓派默认的python指向Python2,对非ASCII字符兼容性差 - 脚本路径建议写绝对路径,例如
/home/pi/Desktop/R3D5/motor.py,避免工作目录匹配错误
- 打开你要调用的
- 尝试2报错(Matlab字符串拼接错误)修复
你使用+拼接字符数组时,当ang、dir的长度和前面的固定字符串长度不匹配就会触发该错误,Matlab拼接命令不要用+,改用sprintf或者strcat更稳妥。
完整正确操作流程
- 先验证树莓派本地脚本可用性:在树莓派终端直接运行
python3 /home/pi/Desktop/R3D5/motor.py 100 1,确认脚本本身可以正常接收参数运行,排除脚本本身的逻辑问题 - Matlab端正确调用代码示例:
% 假设raspi为已经初始化完成的树莓派连接对象,ang、dir为待传入的参数变量 % 方法1:使用sprintf生成命令,适配多参数场景更易用 cmd = sprintf('python3 /home/pi/Desktop/R3D5/motor.py %s %s', num2str(ang), num2str(dir)); % 执行命令 system(raspi, cmd); % 方法2:使用strcat拼接,注意所有参数统一转为字符数组 cmd = strcat('python3 /home/pi/Desktop/R3D5/motor.py ', ' ', num2str(ang), ' ', num2str(dir)); system(raspi, cmd);
- 如需调试可接收执行返回结果:
[status, stdout, stderr] = system(raspi, cmd);
status为0代表执行成功,stdout为脚本标准输出内容,stderr为错误输出内容,可直接打印排查问题。
内容的提问来源于stack exchange,提问作者Mateus Cabral
相关产品推荐
相关产品推荐

