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

如何在bash中使用mosquitto_pub发布bytearray类型的MQTT消息

问题原因

你的数据损坏来自两个核心错误:

  • Python侧直接打印bytearray对象,输出的是字节数组的可读repr字符串(比如bytearray(b'\x01\x02')会输出成文本bytearray(b'\\x01\\x02')),根本不是你要的原始二进制数据
  • Bash侧使用$(命令替换)+echo的组合会自动处理特殊字符:自动删除空字节、按空格/换行分割内容、触发转义规则,必然破坏二进制流
修复方案

第一步 修改Python输出逻辑

把Python脚本末尾的打印逻辑替换成直接向标准输出写原始二进制,不要加任何多余的文本、换行:

# 替换掉原来的print(bytearray(...))行
sys.stdout.buffer.write(myobj.SerializeToString())
sys.exit(0)

第二步 修改Bash脚本逻辑

完全避开Bash处理二进制内容的环节,直接把Python输出通过管道传给mosquitto_pub即可,不需要中间变量、echo或者临时文件:

#!/bin/bash
python Status.py | mosquitto_pub -h localhost -t "component_status" -s

如果确实需要用临时文件存储,也直接重定向Python的原始输出即可:

# 不要加echo和命令替换,直接重定向Python输出
python Status.py > status.bin
mosquitto_pub -h localhost -t "component_status" -f status.bin
验证方法

你可以先执行python Status.py | hexdump -C,输出的十六进制内容和你Python直接输出的序列化二进制对比,确认内容一致后再走MQTT发布即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 13:45:03