我有一个小循环,应该从串行端口读取一些多行和未指定长度(有时相当大)的文本数据,并将其写入文件:
while True:
data = port.readline()
file.write(data)
if not data:
break
我正确设置了端口,整个程序在 Windows 机器上运行良好。当我在 Linux 机器上运行它时,它仍然会接收数据,但软件流控制无法工作 - 而是实际上将XON
和XOFF
(\S 和 \Q) 的控制代码写入文件。导致溢出错误并破坏我的数据。我已经阅读并尝试了所有我能想到的东西——似乎大多数这样的例子只需要几个字节并且没有使用任何流控制。我也尝试过miniterm
包含的内容pySerial
,它给出了相同的结果。
有任何想法吗?
为文件和端口添加了行:
file = open('temp.txt', 'ab') #Open the temporary file to append the incoming data to.
port = serial.Serial('/dev/ttyAMA0', baudrate=9600, bytesize=8, parity='N', stopbits=1, timeout=1, xonxoff=1, rtscts=0, dsrdtr=0)
除了我将一个字符串写入另一个设备以开始发送之外,没有什么比这更多的了,因为我看到了带有数据的响应,所以这很有效。我也尝试过打印到控制台而不是写入文件。同样的事情 - 溢出和打印控制代码。
更新:我也尝试过一次读取一个字节而不是整行,并尝试了其他波特率——所有这些都没有变化。
更新#2:一直在做一些阅读和测试。用 minicom 测试。结果相同。手动验证端口是否已使用“stty -a”正确设置(尽管我不相信这一点,因为它可能会根据我阅读的内容保存和恢复设置)。这可能是termios的问题?