Python串口通信问题:发送命令无法获取设备回复
问题分析与解决方案
你的代码仅回显发送的命令,未获取到设备返回结果,核心原因是串口设备需要命令以换行符结尾才会执行——TeraTerm会自动在输入命令后添加回车/换行,而你的Python代码未添加,导致设备未识别这是一条完整命令,自然不会返回结果。此外,提前等待设备提示符出现,能确保设备处于就绪状态,提升可靠性。
修改后的代码示例
import serial import time ser = serial.Serial('COM5', 38400, timeout=2) print(ser.name) # 先读取并确认设备初始提示符(比如Console#),确保设备就绪 time.sleep(0.5) init_prompt = ser.read(ser.inWaiting()) print("初始提示符:", init_prompt.decode()) # 命令末尾添加\r\n(多数串口设备需回车换行触发命令执行) msg = 'show interfaces status ethernet 0/1\r\n' ser.write(msg.encode()) # 等待设备处理并返回数据,时长可根据设备响应速度调整 time.sleep(1) res = ser.read(ser.inWaiting()) print("设备回复:\n", res.decode()) ser.close()
额外优化建议
- 若设备响应较慢,可替换等待与读取逻辑,循环读取直到无新数据:
# 替换原等待和读取代码 res = b'' start_time = time.time() while time.time() - start_time < 3: # 最多等待3秒 if ser.inWaiting() > 0: res += ser.read(ser.inWaiting()) time.sleep(0.1) # 给设备预留发送剩余数据的时间 print("设备回复:\n", res.decode()) - 部分设备可能仅需
\n而非\r\n,可根据实际情况调整命令结尾的换行符。 - 确认串口参数(波特率、奇偶校验、停止位、流控等)与TeraTerm完全一致,若TeraTerm使用无流控,代码中可明确指定
xonxoff=False, rtscts=False, dsrdtr=False避免参数差异。
内容的提问来源于stack exchange,提问作者martinmistere
相关产品推荐
相关产品推荐

