You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Thonny正常运行的Python脚本在树莓派终端执行失败问题求解

排查思路

无sudo运行报AttributeError问题

  • 先加调试代码确认输出内容:在devices = data.split('},')之后,遍历每个i时先打印print(repr(i)),查看实际拿到的tuya-cli输出是否包含预期的name:、id:、key:字段。普通用户运行时大概率tuya-cli输出中混杂了权限报错、配置缺失提示,导致正则匹配不到内容返回None。
  • 优化正则容错性:将正则规则调整为re.search(r"name:\s*['\"](.*?)['\"]", str(i)),兼容单双引号、字段前后的空格差异;同时增加非空判断,确认匹配到结果后再调用group()方法,避免直接崩溃。
  • 检查tuya-cli配置权限:普通用户运行时读取的是/home/pi/.tuya/下的配置文件,确认该目录及文件对pi用户可读,无权限不足问题。

加sudo运行报pexpect超时问题

  • 从报错的buffer内容可以直接定位问题:当前tuya-cli已经输出了交互式提示The API key from tuya.com:,等待用户输入,但你的代码中expect匹配的是\r\n(换行符),而交互式输入提示的末尾默认没有换行符,因此永远匹配不到触发超时。
  • 调整expect匹配规则:不要匹配换行,改为匹配实际的交互提示文本,例如第一步如果是确认继续的提示,就匹配对应的关键词,比如child.expect('Do you want to continue.*'),再发送y;后续匹配child.expect('The API key from tuya.com:')之后再发送你的密钥,完全按照实际手动运行sudo tuya-cli wizard的交互流程调整匹配逻辑即可。
  • 检查root用户下的tuya-cli状态:sudo运行时切换到了root用户,root家目录下没有tuya-cli的缓存配置,因此会从头走向导流程,和普通用户已经配置过的流程不一样,需要先手动跑一次sudo tuya-cli wizard确认完整的交互步骤,再对应修改代码。
  • 可选优化:给expect方法增加超时参数child.expect(xxx, timeout=120),避免网络拉取设备信息时超时;开启pexpect日志child.logfile = open('/tmp/tuya_debug.log', 'wb'),可以完整记录所有交互输出,方便后续排查。

内容的提问来源于stack exchange,提问作者Mizuna

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 03:12:00