2017-05-30 7 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

受け取った1文字につき*印刷しています。 'print()'はデフォルトで印刷後に改行を追加します。 –

答えて

1

最初の例では、各ループで1バイトを読み取り、印刷します。
改行はそれぞれprintで追加されます。

2番目の文では、100バイトより短いので、一度に文章全体を読み、それを印刷するので、最後に改行が1つしかありません。

のようにあなたは、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) 
+0

ありがとう!先端のために!私が最初のケースのように文字列内でそれをしたいのであれば、文字列変数を作成してそれに各文字を追加する必要がありますか?すべてのループでは? –