无需连接实体设备,如何通过Python脚本查看向串口写入的内容?
解决方案
完全可以实现,核心思路是用虚拟串口替代实体串口,或是直接Mock串口对象捕获写入数据,不需要接入任何硬件设备即可验证命令逻辑。
方案1:虚拟串口方案(模拟真实串口通信全流程)
适合需要完整验证串口通信链路的场景
前置准备
- 虚拟串口工具:
- Windows 平台可使用 com0com 创建配对的虚拟串口对,例如配置
COM1和COM2配对,两个端口的数据会双向互通 - macOS/Linux 平台无需额外安装工具,直接用系统自带
pty模块即可生成虚拟终端对
- Windows 平台可使用 com0com 创建配对的虚拟串口对,例如配置
- 安装Python串口依赖:
pip install pyserial
操作步骤
- 修改你原有业务代码的串口配置,将原实体串口号替换为虚拟串口对的第一个端口,写入逻辑无需改动:
import serial # 原代码:ser = serial.Serial("COM3", 9600) 替换为虚拟串口 ser = serial.Serial("COM1", 9600) ser.write(b"AT+VERSION\r\n") ser.write(b"AT+BAUD=115200\r\n")
- 编写独立的监听脚本,打开虚拟串口对的第二个端口读取写入的内容:
import serial # 打开配对的另一个虚拟串口 listen_ser = serial.Serial("COM2", 9600, timeout=1) while True: recv = listen_ser.read(1024) if recv: # 同时打印十六进制原始数据和字符串内容,方便校验格式 print(f"捕获写入数据:HEX[{recv.hex(' ')}] | 字符串[{recv.decode(errors='replace')}]")
方案2:Mock对象方案(仅验证命令生成逻辑)
适合单元测试阶段快速验证,无需配置虚拟串口环境
直接用单元测试Mock工具替换串口实例,捕获所有write方法的调用参数即可:
from unittest.mock import Mock # 替换你代码中初始化的serial对象 mock_serial = Mock() # 你的业务写入逻辑无需改动,直接用mock对象操作 mock_serial.write(b"AT+TEST=1\r\n") mock_serial.write(b"AT+SEND=test_data\r\n") # 遍历所有写入调用的参数,直接验证命令是否符合预期 for call in mock_serial.write.call_args_list: sent_cmd = call[0][0] print(f"写入命令:{sent_cmd!r}")
内容的提问来源于stack exchange,提问作者NotAVeryGoodEE
相关产品推荐
相关产品推荐

