如何将传入的单个字符加起来形成一个字符串?在
对于exmaple:
来自UART的字符以以下格式打印:
\x02
1
2
3
4
5
6
7
\X03
\x02
a
b
c
d
e
f
g
\x03
我希望输出如下:
^{pr2}$我已经试过了:
#!/usr/bin/env python
import time
import serial
ser = serial.Serial('/dev/ttyUSB0',38400)
txt = ""
ser.flushInput()
ser.flushOutput()
while 1:
bytesToRead = ser.inWaiting()
data_raw = ser.read(1)
while 1:
if data_raw !='\x02' or data_raw !='\x03':
txt += data_raw
elif data_raw == '\x03':
break
print txt
有什么办法吗?我没有得到任何输出使用这个。在
首先,您不需要调用} 将阻塞直到数据可用,除非您显式设置了读取超时。其次,如果您坚持使用它,请记住函数} 取代。在
inWaiting
:^{inWaiting
已被属性^{字符串
/x03
是一个包含所有可打印字符的4个字符的字符串。另一方面,字符串\x03
只包含一个ASCII代码为3的不可打印字符。反斜杠是Python字符串中的转义字符。\x
后跟两个数字是ASCII字符代码。请使用反斜杠。这就是您看不到输出的直接原因:四个字符的字符串永远不会出现在一个字符的读取中。在既然不碍事,最重要的是要记住,当你遇到一个终结符字符时,要清空缓冲区。假设您希望使用效率低下的方法就地添加到字符串中。当您到达} ,这是一个可变序列。请记住,
\x03
时,您应该打印txt
,并将其重置回''
,而不是跳出循环。更好的方法可能是使用^{read
返回的是字节,而不是python3.x中的字符串。这意味着您应该解码结果,如果您想要文本:txt = txt.decode('ascii')
。在我建议进一步改进,并创建一个无限的生成器函数来将蒸汽分割成字符串。您可以使用该生成器打印字符串或对其执行任何其他操作:
我想有一种方法可以帮你一点忙
我首先创建一个空列表,每次您收到一个新的原始数据。你把它附加到列表中。一旦到达结束字符,就可以创建字符串并将其打印出来。在
我冒昧地删除了这里的一个循环,为您提供了一个更简单的方法。代码不会在结尾处自行中断(如果需要,只需在打印后添加一个中断)。当您到达结束字符时,它将输出结果,然后等待下一个数据流开始。在
如果您想看到中间结果,您可以打印出每个原始数据,并可以在打印当前加入的列表后立即添加。在
请确保在打开端口时将超时值设置为“无”。这样,您只需等待接收一个位,处理它,然后返回一次读取一个位。在
^{pr2}$http://pyserial.readthedocs.io/en/latest/pyserial_api.html获取有关mor的信息。在
相关问题 更多 >
编程相关推荐