2017-05-30 68 views
0

我正在使用PySerial 3.0.1和Python3。身份不明 r n行爲

這是我的下面的代碼。

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... 

我的第一個代碼示例有一個ewline每一個輸入?我的傳感器反饋中根本沒有「\ n」或「\ r」。

+0

您正在打印*收到的每一個字符*。默認情況下,print()會在打印後添加換行符。 –

回答

1

在第一個示例中,您在每個循環中讀取並打印一個字節。
換行符分別加上print

在第二個函數中,由於它的長度小於100個字節,所以一次讀完整個句子並打印出來,所以最後只有一個換行符。

你可以用end參數更改行(\ n)的默認結束了print,如:

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) 
+0

非常感謝!提示!如果我確實需要像第一種情況那樣使用字符串,我應該創建一個字符串變量並將每個字符附加到它上面?所有在一個while循環? –