1

我正在使用 python 2.7.2 和 pyserial 2.6。与具有 eol 的“\n”以外的字符的设备交谈时,使用 pyserial.readline() 的最佳方法是什么?pyserial 文档指出 pyserial.readline() 在 python 2.6+ 中不再接受 'eol=' 参数,但建议使用 io.TextIOWrapper 如下:ser = serial.serial_for_url('loop://', timeout= 1 ) sio = io.TextIOWrapper(io.BufferedRWPair(ser, ser))

然而,python io.BufferedRWPair 文档特别警告不要使用这种方法,称“BufferedRWPair 不会尝试同步对其底层原始流的访问。您不应将其与读取器和写入器传递相同的对象;请改用 BufferedRandom。”

有人可以指出 pyserial.readline() 与“eol”以外的其他 eol 一起工作的工作示例吗?

谢谢,汤姆

4

2 回答 2

0

read() 对其读取的数据具有用户可设置的最大大小(以位为单位),如果您的数据字符串是可预测的长度,您可以简单地将其设置为捕获固定长度的字符串。它在执行时有点“肯塔基风向”,但只要您的数据字符串大小一致,它就不会出错。

除此之外,您真正的选择是捕获数据流并将其写入另一个文件,然后手动/以编程方式拆分您的条目。

例如,您可以将数据流写入 .csv 文件,并将分隔符变量调整为您的 EoL 字符。

于 2012-10-17T22:45:40.037 回答
0

假设 s 是一个打开的 serial.serial 对象,换行符是 \r。然后这将读取到行尾并将所有内容作为字符串返回到 '\r'。

def read_value(encoded_command):
    s.write(encoded_command)
    temp = ''
    response = ''
    while '\r' not in response:
        response = s.read().decode()
        temp = temp + response
    return temp

And, BTW, I implemented the io.TextIOWrapper recommendation you talked about above and it 1)is much slower and 2)somehow makes the port close.

于 2017-12-15T21:26:01.110 回答