pySerial 2.6:在readline()中指定行尾

pySerial 2.6:在readline()中指定行尾,第1张

pySerial 2.6:在readline()中指定行尾

我遇到了同样的问题,并实现了我自己的readline()函数,该函数是我从pyserial包中的serialutil.py文件复制和修改的。

串行连接是此函数所属的类的一部分,并保存在属性’self.ser’中

def _readline(self):    eol = b'r'    leneol = len(eol)    line = bytearray()    while True:        c = self.ser.read(1)        if c: line += c if line[-leneol:] == eol:     break        else: break    return bytes(line)

与等待超时相比,这是一个更安全,更好和更快的选择。

编辑:尝试使io.TextIOWrapper方法工作时,我遇到了这篇文章。因此,可以使用以下代码来代替使用上面提到的自定义readline函数:

self.ser = serial.Serial(port=self.port,   baudrate=9600,   bytesize=serial.EIGHTBITS,   parity=serial.PARITY_NONE,   stopbits=serial.STOPBITS_ONE,   timeout=1)self.ser_io = io.TextIOWrapper(io.BufferedRWPair(self.ser, self.ser, 1),newline = 'r',         line_buffering = True)self.ser_io.write("IDr")self_id = self.ser_io.readline()

确保将参数传递

1
BufferedRWPair
,否则在每个字节导致串行连接再次超时后,它将不会将数据传递给TextIOWrapper。

设置为时

line_buffering
True
不再需要
flush
在每次写 *** 作后调用函数(如果写 *** 作以换行符终止)。

编辑:TextIOWrapper方法实际上适用于 小的
命令字符串,但其行为是不确定的,并且在传输多个字节时可能导致错误。实际上,最安全的做法是实现您自己的

readline



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5623509.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-15
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存