栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

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

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/617422.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号