繁体   English   中英

无法识别的\\ r \\ n行为

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM