身份不明\ r \ n的行为

时间:2017-05-30 09:22:49

标签: python serial-port newline pyserial

我正在使用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"在我的传感器的反馈中。

1 个答案:

答案 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)