Python 如何将串行输入拆分为消息

Python 如何将串行输入拆分为消息,python,python-3.x,serial-port,pyserial,Python,Python 3.x,Serial Port,Pyserial,我在Raspberry Pi上有2个串行端口。目前,代码正在从端口1读取数据并将其写入端口2,反之亦然。我试图做的是将从两个端口读取的输入拆分,并根据指定的字符(例如#或!)将其拆分为不同的消息(字符组) 另外,最后如何修改当前的“for”循环,以便拆分两个端口的消息,目前代码仅用于拆分来自1个端口的数据 我已经尝试过split(),但它给出了一个类型错误。原因可能是串行输入的类型可能不同 import serial ser1 = serial.Serial('/dev/ttyUSB0', ti

我在Raspberry Pi上有2个串行端口。目前,代码正在从端口1读取数据并将其写入端口2,反之亦然。我试图做的是将从两个端口读取的输入拆分,并根据指定的字符(例如#或!)将其拆分为不同的消息(字符组)

另外,最后如何修改当前的“for”循环,以便拆分两个端口的消息,目前代码仅用于拆分来自1个端口的数据

我已经尝试过split(),但它给出了一个类型错误。原因可能是串行输入的类型可能不同

import serial
ser1 = serial.Serial('/dev/ttyUSB0', timeout=2)
ser2 = serial.Serial('/dev/ttyUSB1', timeout=2)
print (ser1)
print (ser2)
ser1_list = []
ser2_list = []

while (True):
    data1 = ser1.readlines()
    data2 = ser2.readlines()
    if data1 or data2:
        ser1_list.extend(data1)
        ser2.writelines(data1)
        byte_split1 = ser1_list.split("1")
        ser2_list.extend(data2)
        ser1.writelines(data2)
        byte_split2 = ser1.split('1')
        for x in byte_split1:
            print(x)
    else:
        break
ser1.close()
ser2.close()
预期结果的示例: 如果输入为:

abcde#fghi#jklmnop#
它将输出:

abcde
fghi
jklmnop

看起来您正试图在这两个位置之间建立类似聊天的功能。请考虑如何用规范的方式去做:

将其拆分为并行进程,一个用于
ser1=>ser2
,另一个用于
ser2=>ser1
。每个流程将按照自己的方向处理通信

这允许您为每个端口编写一个侦听器;您的两个进程将是相同的,只是您用相反顺序的端口来实例化它们。每个侦听器收集流量,直到到达分隔符;此时,它将缓冲区内容写入该点,并移动缓冲区指针。有很多I/O包可以为您执行此操作;您只是在使用分隔符“分块”流


这应该是足够的指导和参考,让您能够找到所需的示例。

我已经有了端口,可以相互通信并写入数据。我正在寻找像split函数这样的东西,它目前不适用于我,因为输入数据被存储为列表而不是字符串。你能举例说明你的意思吗?