[英]Unidentified \r\n behavior
我正在使用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”。
在第一个示例中,您在每个循环中读取并打印一个字节。
每行print
都会添加换行符。
在第二个句子中,您一次读取了整个句子,因为它短于100个字节,然后打印出来,因此末尾只有一个换行符。
您可以使用end
参数更改print
的默认行尾(\\ 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)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.