未识别的 \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)
我正在使用 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)