Python 如何将串行输入拆分为消息
我在Raspberry Pi上有2个串行端口。目前,代码正在从端口1读取数据并将其写入端口2,反之亦然。我试图做的是将从两个端口读取的输入拆分,并根据指定的字符(例如#或!)将其拆分为不同的消息(字符组) 另外,最后如何修改当前的“for”循环,以便拆分两个端口的消息,目前代码仅用于拆分来自1个端口的数据 我已经尝试过split(),但它给出了一个类型错误。原因可能是串行输入的类型可能不同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
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函数这样的东西,它目前不适用于我,因为输入数据被存储为列表而不是字符串。你能举例说明你的意思吗?