2017-05-30 1 views
0

Ich benutze PySerial 3.0.1 und Python3.Nicht identifiziertes r n Verhalten

Hier ist mein folgender Code.

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; 

und die Antwort ist so etwas wie:

... 
V 
e 
r 
s 
i 
o 
n 
... 

> 

Welche weil seltsam ist, wenn ich den Code wie folgt,

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; 

schrieb das Ergebnis, das ich bekommen ist:

...Version... 

Wie ist mein erstes Codebeispiel mit einem jeden Eingang einfließen lassen? Es gibt kein "\ n" oder "\ r" in der Rückmeldung von meinem Sensor überhaupt.

+0

Sie drucken * jedes einzelne empfangene Zeichen *. 'print()' fügt standardmäßig nach dem Drucken einen Zeilenumbruch hinzu. –

Antwort

1

In Ihrem ersten Beispiel lesen und drucken Sie in jeder Schleife ein Byte.
Die neue Zeile wird von jedem print hinzugefügt.

In der zweiten, lesen Sie den gesamten Satz auf einmal, da es kürzer als 100 Bytes ist, und drucken Sie es, so dass Sie nur eine neue Zeile am Ende haben.

können Sie das Ende der Zeile Standard ändern (\ n) für print mit dem end Parameter, wie in:

while (1): 
    sys_reply = port.read(1) 
    sys_reply_str = sys_reply.decode('cp437') 
    print (sys_reply_str, end=''); 
    if sys_reply_str == '>': 
     break; 

Ihren Kommentar zu beantworten: die gemeinsame Weg, es zu tun ist, jedes Zeichen anhängen zu eine Liste und verbinde sie am Ende zu einer Zeichenfolge. Der Grund dafür ist, dass Strings in Python unveränderlich sind. Das Hinzufügen eines Zeichens am Ende (wie in s = s + c) würde die Erstellung einer neuen s-Zeichenfolge bei jeder Addition beinhalten.

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

Vielen Dank! für den Tipp! Wenn ich es in einer Zeichenfolge wie im ersten Fall will, sollte ich eine String-Variable erstellen und jedes Zeichen anhängen? Alles in einer Weile? –