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

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
whaeva
User
Beiträge: 66
Registriert: Mittwoch 25. Februar 2009, 15:30

Sonntag 1. März 2009, 17:15

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?
whaeva
User
Beiträge: 66
Registriert: Mittwoch 25. Februar 2009, 15:30

Sonntag 1. März 2009, 17:48

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.
Darii
User
Beiträge: 1177
Registriert: Donnerstag 29. November 2007, 17:02

Sonntag 1. März 2009, 18:16

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.
whaeva
User
Beiträge: 66
Registriert: Mittwoch 25. Februar 2009, 15:30

Sonntag 1. März 2009, 19:18

Besten Dank, Du hast mir sehr geholfen!

Code: Alles auswählen

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