pySerial XON/OFF在Linux上失败,但可以在Windows上运行

2024-03-29 05:47:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个小循环,它应该从串行端口读取一些多行、长度不明(有时相当大)的文本数据,并将其写入一个文件:

while True:
    data = port.readline()
    file.write(data)
    if not data:
    break

我有正确的端口设置,整个程序在windows机器上运行得很好。当我在Linux机器上运行它时,它仍然接收数据,但是软件流控制无法工作——相反,XON和{}(\S和\Q)的控制代码实际上被写入到文件中。导致溢出错误并销毁我的数据。 我已经阅读并尝试了我所能想到的一切——似乎大多数这样的例子只需要几个字节,并且没有使用任何流控制。我也尝试了miniterm,它包含在pySerial中,它给出了相同的结果。在

有什么想法吗?在

为文件和端口添加了行:

^{pr2}$

除了我写一个字符串到另一个设备开始发送之外,没有什么比这更多的了,因为我看到的是返回数据的响应。我也尝试过打印到控制台而不是写入文件。同样的事情-超限和打印控制代码。在

更新:我也尝试过一次读取一个字节,而不是整个行,并尝试过其他波特率-所有这些都没有改变。在

更新2:一直在做一些阅读和测试。用minicom测试。同样的结果。手动验证端口是否使用“stty-a”正确设置(尽管我不信任它,因为它可能会根据我读到的内容保存和恢复设置)。可能是termios的问题?在


Tags: 文件数据端口文本机器truedatareadline
2条回答

也许你可以尝试使用这个串行捕获代码。它也有Pyserial方法,但它被简化了。如果您更改换行符以满足您的需要,换行符有一个拆分公式可以帮助您实现流控制。在

https://github.com/DaDaDadeo/Batch-Capture/blob/master/serial_to_tcp.py

尝试从收到的数据中删除不可打印的字符。在

data = data.rstrip()

相关问题 更多 >