我正在使用PySerial 3.0.1和Python3。
以下是我的以下代码。
port.send_break()
while (1):
sys_reply = port.read(1)
sys_reply_str = sys_reply.decode('cp437')
print (sys_reply_str);
if sys_reply_str == '>':
break;
,答案如下:
...
V
e
r
s
i
o
n
...
>
这很奇怪,因为如果我写这样的代码,
port.send_break()
while (1):
sys_reply = port.read(100)
sys_reply_str = sys_reply.decode('cp437')
print (sys_reply_str);
if sys_reply_str == '>':
break;
我得到的结果是:
...Version...
我的第一个代码示例如何在每次输入时都有换行符?没有" \ n"或" \ r"在我的传感器的反馈中。
答案 0 :(得分:1)
在第一个示例中,您在每个循环中读取并打印一个字节
每个print
添加换行符。
在第二个中,你一次读完整个句子,因为它短于100个字节,并打印出来,所以你最后只有一个换行符。
您可以使用print
参数更改end
的默认行尾(\ n),如下所示:
while (1):
sys_reply = port.read(1)
sys_reply_str = sys_reply.decode('cp437')
print (sys_reply_str, end='');
if sys_reply_str == '>':
break;
回答你的评论:常见的做法是将每个字符串附加到列表中,并在最后将它们连接成一个字符串。原因是Python中的字符串是不可变的,因此在末尾添加一个字符(如在s = s + c
中)将在每次添加时创建一个新的s
字符串。
received_chars = []
while (1):
sys_reply = port.read(1)
sys_reply_str = sys_reply.decode('cp437')
received_chars.append(sys_reply_str)
if sys_reply_str == '>':
break;
received_string = ''.join(received_chars)
print(received_string)