Seite 1 von 1

pySerial serial.readline() - Newline Character ändern? "

Verfasst: Sonntag 1. März 2009, 17:15
von whaeva
http://pyserial.wiki.sourceforge.net/pySerial

Ich empfange Daten mit <CR> = 0x0D und würde gerne readline() benutzen.
Laut Einführung:

Code: Alles auswählen

line = ser.readline()   # read a '\n' terminated line
Allerdings:

Code: Alles auswählen

print hex(ord("\n")) # -> 0xA (ubuntu linux)
Fällt jemandem noch etwas Besseres ein, als sich mit read() durch die Daten zu hangeln?

Verfasst: Sonntag 1. März 2009, 17:48
von whaeva
Wie kann man das noch besser schreiben?

Code: Alles auswählen

# serial.readline() only recognizes '\n' 0x0A
line = ''
while True:
	ch = serial.read()
	if ch == 0xd:
		break
	else:
		line = line + ch
Wäre es günstig, die Methode von serial überzubügeln (Vererbung oder wie das heisst)? Eine Prüfung auf timeout müsste auch noch rein, aber das ist der Fall wenn ch = None ist.

Verfasst: Sonntag 1. März 2009, 18:16
von Darii
Doku bzw. help(serial.readline) lesen wird helfen.

Code: Alles auswählen

def readline(self, size=None, eol='\n'):
    """read a line which is terminated with end-of-line (eol) character
    ('\n' by default) or until timeout"""
    ...

Zu deinem Code: Du müsstest schon prüfen ob ch gleich "\r" (oder "\x0d") ist, 0xd ist ein Integer und kein String.

Verfasst: Sonntag 1. März 2009, 19:18
von whaeva
Besten Dank, Du hast mir sehr geholfen!

Code: Alles auswählen

>>> "\r" == 0xd
False
>>> "\r" == "\x0d"
True
>>> "\r" == chr(0xd)
True