我的程序是这样开始的:

#!/usr/bin/env python
import sys

from serial import Serial, EIGHTBITS, PARITY_NONE, STOPBITS_ONE

SERIAL_DEVICE = '/dev/ttyUSB0'

ser = Serial(SERIAL_DEVICE, timeout=2, baudrate=9600, bytesize=EIGHTBITS,
             parity=PARITY_NONE, stopbits=STOPBITS_ONE)

程序的下一部分向设备发送一些内容,然后期望得到响应。当我在重新启动后运行它时,它找不到预期的响应,并以错误终止(这是正确的行为,除了它看不到预期的响应)。
但是,如果我运行minicom并通过minicom与设备对话,它可以正常工作。如果我关闭minicom并运行程序,它就可以正常运行。minicom配置有一个空的初始化字符串,我总是退出而不重置。
不用说,minicom有相同的设置AFAICS。它也有硬件控制,但我确实尝试将rtscts=True作为Serial()的参数,但没有发现任何差异(即使参数中有错误,这也不能解释为什么在执行minicom之后程序可以正常工作)。

最佳答案

出现的症状表示程序没有将串行终端初始化为所需的正确模式。
minicom有相同的设置AFAICS
似乎你选择猜测而不是收集实际数据。
在使用minicom之前和之后使用stty -a -F /dev/ttyUSB0
主要的区别是termios模式在默认情况下可能是规范的(在重新启动之后),minicom将其保留为非规范模式。
在启动程序之前尝试使用stty raw -F /dev/ttyUSB0

10-05 18:11