我有这种奇怪的情况,从串行端口读取似乎损坏了对
print
的调用。此代码:
ser = serial.Serial('COM13', 115200, timeout=5)
ser.reset_input_buffer()
ser.reset_output_buffer()
ser.write("stat\n".encode('utf-8'))
ser.flush()
for i in range(10):
print(f"read: <{self.ser.read(10).decode('utf-8')}>")
输出
>ead: <s
read: <
>
read: <>
read: <>
read: <>
...
第一个'>'怎么能由python第一次打印而不是
r
的read
?!
如果我只用一个字符串替换串行调用,行为就不会再出现了。
一个疯狂的猜测是你从串口得到一个“回车”字符(ASCII 13);这将导致终端跳回到最左边的位置。尝试将 !r 添加到 f 字符串中 {} 块的末尾,以便它打印字符串的 repr(或者只是省略 .decode(...) 以便打印未解码的字节数组);如果那里有任何不可打印的东西,那应该很明显。