Informationen über USB einlesen und in Datei speichern

  • Sehr merkwürdig. Ändere Dein Skript mal versuchsweise wie folgt:

    Wie ist dann die Ausgabe?

  • Ausgabe in der console:

    <type 'str'>

    writing x = "

    " to file 1

    done

    writing x = "

    " to file 2

    done

    <type 'str'>

    writing x = "12:51 16.10.18

    " to file 1

    done

    writing x = "12:51 16.10.18

    " to file 2

    done

    <type 'str'>

    writing x = "23A

    " to file 1

    done

    writing x = "23A

    " to file 2

    done

    <type 'str'>

    writing x = "Einzelruf

    " to file 1

    done

    writing x = "Einzelruf

    " to file 2

    done

    <type 'str'>

    writing x = "" to file 1

    done

    writing x = "" to file 2

    done


    keine Ausgabe in beiden txt Dateien

  • Okay, Du liest also offenbar nicht eine Zeile, sondern mehrere ein. Wenn Du die eine Datei mit jeder dieser Zeilen überschreibst, steht am Ende natürlich nur die letzte drin. Und die ist, wie in der Ausgabe zu sehen, ein leerer String. Die leere Datei ist also zu erwarten.

    keine Ausgabe in beiden txt Dateien

    Das hingegen wundert mich: Wird jetzt tatsächlich nicht mehr in die "append"-Datei geschrieben? Das hat doch vorher funktioniert.

  • haben bestimmt zusammen geschrieben. Du hast in deinem Quelltext die Unterstriche bei file 1 zu file_1 vergessen. Hab das ergänzt. jetzt geht die append wieder.


    Jetzt verstehe ich die Ausgabe. Ok. Kann ich das ändern? möchte das in der write.txt genau das gleiche drin steht wie in der append.txt


    Das möchte ich dann splitten. dazu habe ich das script schon fertig :)

  • Du hast in deinem Quelltext die Unterstriche bei file 1 zu file_1 vergessen. Hab das ergänzt. jetzt geht die append wieder.

    Daran kann's nicht liegen, da die bei mir lediglich im print-Befehl nicht stehen. Aber egal, Hauptsache es geht jetzt.

    Kann ich das ändern?

    Nur, wenn Du eine zuverlässige Methode hast, zu erkennen, wann eine Nachricht vollständig empfangen ist.

  • wenn ich die ser.readlines in x setze ist das doch immer vollständig oder? und dann führe ich das speichern in die Datei ja erst aus, wenn x stattfindet. Also muss der komplette Text ja in x sein oder?

  • wenn ich die ser.readlines in x setze ist das doch immer vollständig oder?

    Wie Du obiger Ausgabe entnehmen kannst, offenbar nicht. Da wird x ja nach jedem Einlesen ausgegeben. Beim ersten Mal enthält es einen Zeilenumbruch, beim nächsten Mal Datum und Uhrzeit usw.

  • Dann versuch mal sowas in der Art:

    Komplett ungetestet direkt ins Forum getippt, Fehler sind also mehr oder weniger garantiert.

  • Hast nur bei der with open einen : vergessen. Leider ließt dein script nichts aus. hab noch eine print anweisung rein gebracht, aber auch da kommt nix. die BOM Bedingung scheint nicht erfüllt denke ich...

  • Setz mal direkt hinter die Zeile mit dem readline ein "print token.encode('hex')". Dann sollten wir sehen, wie der Anfangs-/Endecode tatsächlich aussieht, und können unseren Code entsprechend anpassen.

  • so?

    while True:

    token = ser.readline

    print token.encode('hex')

    if (token == BOM): # Wir empfangen eine neue Nachricht



    kommt ein Fehler:

    AttributeError: 'builtin_function_or_method' object has no attribute 'encode'

  • Ok. das funktioniert einwandfrei.


    Vielen Dank Manul für deine Geduld. So stelle ich mir das "Programmieren lernen" vor. Vormachen, nachmachen und erklären.


    Zum erklären versuche ich es selber: Mein Problem war, dass mit der write methode in "w" nur die erste Zeile der ser.readline ausgegeben wurde. Da sie ja leer war, konnte man nichts sehen und so dachte ich, dass die Ausführung nicht funktioniert.


    In deinem script definierst du einen Beginn und das Ende der ser.readline die du token nennst. Wenn der Beginn erfüllt ist, ließt du die anderen Zeilen aus und definierst sie in date, msg und code.

    Diese speicherst du dann zeitgleich in beiden Dateien sobald das Ende der Nachricht erfüllt ist.


    Danke nochmal. Ich werde jetzt nacharbeiten und mir die genutzten methoden noch einmal zu Gemüte ziehen.

  • Gern geschehen.

    Mein Problem war, dass mit der write methode in "w" nur die erste Zeile der ser.readline ausgegeben wurde. Da sie ja leer war, konnte man nichts sehen und so dachte ich, dass die Ausführung nicht funktioniert.

    Kleine Korrektur: Du hast schon alle Zeilen ausgegeben aber eben mit jeder Zeile die Datei wieder überschrieben. Was Du am Ende (nicht) gesehen hast, war also nicht die erste, sondern die letzte Zeile.