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

Python操作USB调制解调器串口可写入但无法读取返回数据问题

USB调制解调器串口读取无响应问题排查与解决

问题表现

读取USB调制解调器串口数据时遇到两类异常:

  • 写入串口数据功能正常,但调用读取接口后终端无响应卡住,仅能接收输入无任何反馈,按回车也无处理动作,最终只能通过Ctrl+C强制终止程序
  • 尝试读取指定字节数、遍历缓存变量等方案均无效,inWaiting()/in_waiting方法返回值始终为0,即使调制解调器已成功接收写入的指令,也检测不到可读取的返回数据

问题复现代码

import time
import serial

ser = serial.Serial("/dev/ttyUSB2", 115200)

time.sleep(1)
ser.write(b'\r\n' + b'at' + b'\r\n')

time.sleep(1)
print(ser.readline())

根因分析

  1. 程序卡住的诱因:pyserial库默认初始化串口时未设置超时参数,readline()方法会进入永久阻塞状态,直到接收到换行符才会返回,没有对应数据时就会一直处于等待状态,看起来像触发了无限循环
  2. 检测不到返回数据的原因:调制解调器的AT指令响应会拆分为多行返回,默认包含指令回显内容,原有代码的等待时长和无超时配置,导致还未等响应完全写入串口缓存就执行了读取操作,因此缓存区检测不到可用数据

修复方案

初始化串口时添加timeout参数设置读操作超时时间,再按行读取完整的多段响应即可:

import time
import serial

ser = serial.Serial(port="/dev/ttyUSB2", baudrate=115200, timeout=5)

time.sleep(0.5)
ser.write(b'at\r\n')

time.sleep(0.5)
print(ser.readline())
print(ser.readline())
print(ser.readline())

运行输出结果

b'at\r\n'
b'\r\n'
b'OK\r\n'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 23:24:01