ser.readline() Py3.x datentyp

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
luchs2a
User
Beiträge: 8
Registriert: Samstag 28. November 2009, 10:09
Wohnort: HH

Moin,

da ich ja der neue bin, kurz zu mir. Ich versuche seit gestern mich intensiev in python einzufinden, bisher betriebe ich nur rudimentäres C auf microcontrollern. Nun würde ich aber das ganze anders als mit nem Terminal an einen PC anbinden.

bisherige "Erfolge": Python 3.1 installiert, PySerial installiert. als lektüre hangle ich mich an galileo openbock "einstieg in Python 2.6" , diesem Forum und wiki.python-forum.de entlang.

so nun aber wollte ich simpler weise folgendes schreiben:

Code: Alles auswählen

import serial

print ("hallo welt")

ser = serial.Serial(0, 115200, timeout=20)

x = ser.read()          # read one byte
print (x)

s = ser.read(10)        # read up to ten bytes (timeout)
print (s)

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

ser.close()
bei der line= .... Zeile wirft er mir den Fehler:

TypeError: Can't convert 'bytes' object to str implicitlclsy

Soweit ich mittlerweile verstehe, liefert er mir einen byte string zurück aus ascii zeichen, python 3.n hat einen neuen datentyp bytes eingeführt und betrachtet aber alles als strings in unicode. So, in C würde ich sagen casten, aber wie geht das hier??

mit lesen und suchen habe ich den gestrigen abend zu gebracht

auch der versuch, das so zu lösen:

Code: Alles auswählen

import serial

ser = serial.Serial(0, 115200, timeout=20)

x = ser.read()          # read one byte
s = ser.read(10)        # read up to ten bytes (timeout)

while s != '\n':
	s = ser.read()
	x = s + x
	print(s)
	print (x)
	
print (x)

ser.close()
endet nicht wie gewünscht weil ich irgendwie nicht in der lage bin, die while zu beenden (hab auch schon andere end geschichten versucht)

Ich hab wohl ein grundproblem damit, das python automatisch den wertetyp zuweist.

bis denn

Mischa
Denn sie wissen nicht was sie tun.
ms4py
User
Beiträge: 1178
Registriert: Montag 19. Januar 2009, 09:37

luchs2a hat geschrieben:Soweit ich mittlerweile verstehe, liefert er mir einen byte string zurück aus ascii zeichen, python 3.n hat einen neuen datentyp bytes eingeführt und betrachtet aber alles als strings in unicode. So, in C würde ich sagen casten, aber wie geht das hier??

Code: Alles auswählen

str(line)


Das OpenBook von Galileo ist außerdem Schrott: http://bj.spline.de/python_openbook.html
Zum Einstieg in Python ist "A Byte of Python" relativ gut geeignet.
luchs2a
User
Beiträge: 8
Registriert: Samstag 28. November 2009, 10:09
Wohnort: HH

hi,

danke für deine Antwort wenn ich demnach

str(line)=ser.readline()

einfüge bekomme ich ein.

SyntaxError: can't assign to function call

leider sind meine fähigkeiten derart rudimentär das ich das wohl noch nicht so recht umsetzen kann

mischa

edit:

(hast du zufälliger weise auser nem buchverriss noch eine empfehlung für ein buch in deutsch ?) a byte of pythonis ja deutsch ups der titel ward so englisch

mein ziel ist es, wie schon umrissen daten seriell zu empfangen und dann in einem gui darzustellen. sowohl als zahlenwerte als auch als einfache graphen
Zuletzt geändert von luchs2a am Samstag 28. November 2009, 14:25, insgesamt 1-mal geändert.
Denn sie wissen nicht was sie tun.
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

luchs2a hat geschrieben:wenn ich demnach

str(line)=ser.readline()

einfüge bekomme ich ein.

SyntaxError: can't assign to function call
Ich empfehle dringend, dein Ziel erst einmal zurückzustellen, die ersten Kapitel des Python-Tutorials durchzuarbeiten, viel zu experimentieren und kleine Progrämmchen zu schreiben, und dir Zeit zu lassen, bevor du dann auch noch mit GUI-Programmierung beginnst.
luchs2a
User
Beiträge: 8
Registriert: Samstag 28. November 2009, 10:09
Wohnort: HH

hi,

ich danke dir für deine empfehlung sie entspricht auch dem was ich vor habe . ich wollte blos gleich mein ziel mit abliefern.

mit dem lesen bin ich eh dabei aber hin und wieder ein Erfolg wäre schön und nicht 6h lang stochern.

mischa
Denn sie wissen nicht was sie tun.
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

Code: Alles auswählen

line=str(ser).readline()
the more they change the more they stay the same
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Dav1d hat geschrieben:

Code: Alles auswählen

line=str(ser).readline()
Sicher nicht.
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

numerix hat geschrieben:
Dav1d hat geschrieben:

Code: Alles auswählen

line=str(ser).readline()
Sicher nicht.
Stimmt :oops:, nicht genau genug gelesen
the more they change the more they stay the same
Darii
User
Beiträge: 1177
Registriert: Donnerstag 29. November 2007, 17:02

luchs2a hat geschrieben:bei der line= .... Zeile wirft er mir den Fehler:

TypeError: Can't convert 'bytes' object to str implicitlclsy
Bist du sicher das genau das den Fehler verursacht? Bitte komplette Fehlermeldung + Traceback. Ansonsten könnte es auch sein, dass pyserial da einen Bug hat, versuch mal ser.readline(eol=b"\n") statt ser.readline().
luchs2a
User
Beiträge: 8
Registriert: Samstag 28. November 2009, 10:09
Wohnort: HH

hi,

öhm ja, naja, also ich gebs zu, gestern abend hatte ich ja lange gespielt und war irgendwann so weit, das er sich im traceback immer auf meinen code bezogen hat. Heute morgen als ich den thread erstellt habe, hab ich blos noch fix den Fehler erzeugt, aber nicht mehr genau hin geschaut.

also hier vollständig die Ausgabe:

C:\Python31\projekte>test.py
hallo welt
b'\n'
b'\radcw: 352'
Traceback (most recent call last):
File "C:\Python31\projekte\test.py", line 16, in <module>
line = ser.readline() # read a '\n' terminated line
File "C:\Python31\lib\site-packages\serial\serialutil.py", line 422, in readli
ne
line += c # not very efficient but lines are usually not that long
TypeError: Can't convert 'bytes' object to str implicitly


scheint also so als wenn er sich auf das importierte modul bezieht.

Bei dem byte of.. bin ich bis auf das oop kapitel schon recht weit durch. Das oop hebe ich mir auf bis ichs brauche. Nur lesen und probieren um des probieren willens halte ich nicht für Zielführend. Ich mache lieber etwas wenn ich ne Aufgabe für habe. sonst is das so akademisch... .

fände ich natürlich seltsam wenn es an was fertigem liegt oder sollte ich tatsächlich derjenige sein der das zu ersten mal in der kombi nutzt ???

Mischa
Denn sie wissen nicht was sie tun.
Darii
User
Beiträge: 1177
Registriert: Donnerstag 29. November 2007, 17:02

luchs2a hat geschrieben:fände ich natürlich seltsam wenn es an was fertigem liegt oder sollte ich tatsächlich derjenige sein der das zu ersten mal in der kombi nutzt ???
Hast du meinen Vorschlag denn mal ausprobiert?
luchs2a
User
Beiträge: 8
Registriert: Samstag 28. November 2009, 10:09
Wohnort: HH

,


also das hatte ich vor lauter schreck das ich das falsche traceback nutze übergangen. tschuldigung.

auch mit

line = ser.readline(eol=b"\n")

selbe fehlermeldung selbes traceback

mischa
Denn sie wissen nicht was sie tun.
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Wenn ich jetzt nicht irgendetwas übersehen habe, dann ist pyserial noch gar nicht fit gemacht für Python 3.x.

Irgendwo habe ich zwar die Behauptung des Gegenteils gelesen, aber alles, was zum Download angeboten wird, lässt den Schluss zu, dass pyserial noch nicht final an Python 3.x angepasst wurde.

Versuch es doch mal mit Python 2.6 und pyserial.
luchs2a
User
Beiträge: 8
Registriert: Samstag 28. November 2009, 10:09
Wohnort: HH

,

also ich hatte mich an http://pyserial.sourceforge.net/pyseria ... quirements gehalten und auch eine pyserial-py3k-2.5-rc1.win32.exe herunter geladen. Daher dachte ich das wird schon passen und getestet sein.

wenn ich das 2.6 drauf ziehe muss ich da was besonderes beachten ??

wie zukunftssicher ist die 2.6 geschichte ?? (die informationslage is ja bedeutend besser)

Mischa

ps: das mit der 2.6 werde ich nichts desto trotz testen, nachher nach dem Abendbrot
Denn sie wissen nicht was sie tun.
luchs2a
User
Beiträge: 8
Registriert: Samstag 28. November 2009, 10:09
Wohnort: HH

,


so ich hab jetzt mal auf python 2.6 umgestellt mit pyserial 2.5 rc1 und siehe da alles läuft wie gewünscht.

schade da habe ich wohl an der falschen stelle gesucht und die angaben falsch interpretiert.

schade schade

Mischa
Denn sie wissen nicht was sie tun.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Ich würde da ggf. einen Bug an den Autor melden.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
luchs2a
User
Beiträge: 8
Registriert: Samstag 28. November 2009, 10:09
Wohnort: HH

moin,

ohm naja damit habe ich so meine problemchen.... . mit dem englisch steh ich ein wenig auf dem kriegsfuß (ich habs generell nich so mit schriftlichen sparachen wie man sicher meinen posts entnehmen kann).

zudem wäre es interessant ob das bei anderen nachvollziehbar ist oder ??

mischa
Denn sie wissen nicht was sie tun.
Antworten