Informationen über USB einlesen und in Datei speichern

  • Hallo liebe Forummitglieder,

    nach wochenlangem Suchen, bin ich leider (für mich) gezwungen hier mal eine Frage zu stellen, da ich gerade in einem wohl eher simplen Programm nicht weiter komme.


    Ich möchte eine über USB angeschlossene Informationsquelle abhören und bei einem Eingang die Information in Dateien speichern. Dieses zweimal. Einmal als Dokumentation mit dem Kürzel "a" und eimal zur Weiterverarbeitung mit "w".


    Mein Problem ist, dass das mit überschreiben(w) nicht funktioniert... "a", "r2" funktioniert. "w" nicht.

    Woran könnte das liegen?

    Hab im Quellcode ein paar Sachen, die ich später noch brauche, also bitte nicht wundern.


    Vielen Dank jetzt schon für eure informativen Antworten.


    Gruß Jan

  • Moin,

    kann es sein, dass die Informationen sehr kurz hintereinander eintreffen?

    Dann besteht die Möglichkeit, dass durch Dein sleep(3) (wozu eigentlich?) zweifach auf die Datei zugegriffen wird. Weil einfach ein zweites, drittes ... open kommt, bevor der erste Aufruf die Datei geschlossen hat.

  • Wieso mountest du den USB(Stick?) nicht ganz normal und greifst anschließend darauf zu?:conf:


    kann es sein, dass die Informationen sehr kurz hintereinander eintreffen?

    Dann besteht die Möglichkeit, dass durch Dein sleep(3) (wozu eigentlich?)

    Das sleep würd ich komplett streichen, dafür den Datenzugriff so gestalten:

    Code
    1. with open(dateiname, "w") as file_:
    2. file_.write(inhalt)
    3. with open(dateiname1, "a") as file_:
    4. file_.write(inhalt)
  • Danke für den Code Hofei.

    Leider funktioniert auch dieser nicht. Hmm bin mehr als ratlos.

    Auch wenn ich die dateien tausche, schreibt er nur in die mit "a".

    Also liegt es auch nicht an den Schreibrechten der Dateien.

  • Sehr gerne. Hoffe das ist jetzt richtig so:


  • Hofei : Wie kommst Du darauf, daß es sich um einen USB-Stick handelt? Ich denke eher, es ist ein Sensor o.ä., der über USB angebunden ist und dessen Werte abgefragt werden.


    JanR : Verstehe ich das richtig, daß in die Datei, die Du mit "w" öffnest, gar keine Daten geschrieben werden?


    Poste mal bitte die Ausgabe von

    Code
    1. ls -ld /home/pi
    2. ls -l /home/pi/LOG_D.txt
    3. ls -l /home/pi/test.txt
    4. tail /home/pi/LOG_D.txt
    5. tail /home/pi/test.txt
    6. id

    Dann führe mal das folgende, eingekochte Skript aus (wo die Daten, die Du schreiben willst, herkommen, ist ja letztlich ziemlich egal):

    und poste erneut die Ausgabe der obigen Befehle.

    Wie genau rufst Du Dein Skript denn auf?

  • Habe wie Manul es vermutet keinen USB Stick o.ä. am Port. Dort läuft ein Funkalarmempfänger der wenn er alarmiert ist daten übermittelt. Aber wie gesagt da geht es ja nicht drum. Das Problem ist, dass bei "w" nicht in die datei Geschrieben wird. In ihr steht nix.

    und poste erneut die Ausgabe der obigen Befehle.

    Wie genau rufst Du Dein Skript denn auf?

    drwxr-xr-x 26 pi pi 4096 Okt 10 10:34 /home/pi

    -rwxrwxrwx 1 pi pi 1128 Okt 11 08:26 /home/pi/test.txt

    -rwxrwxrwx 1 pi pi 2 Okt 11 08:26 /home/pi/LOG_D.txt


    die tail hab ich ausgeführt. Da kommt bei LOG_D.txt keine Ausgabe und bei test.txt kommen alle Meldungen (darf ich nicht darstellen)


    uid=1000(pi) gid=1000(pi) Gruppen=1000(pi),4(adm),20(dialout),24(cdrom),27(sudo),29(audio),44(video),46(plugdev),60(games),100(users),101(input),108(netdev),997(gpio),998(i2c),999(spi)


    Gestartet wird das script über die RC.local.

    Zum testen starte ich es direkt über die Console.


    -rw-r--r-- 1 pi pi 18 Okt 11 09:32 /home/pi/append.txt

    -rw-r--r-- 1 pi pi 9 Okt 11 09:32 /home/pi/write.txt


    In der append.txt steht 2x Testtext in der write 1x. Dein Script funktioniert


    uid=1000(pi) gid=1000(pi) Gruppen=1000(pi),4(adm),20(dialout),24(cdrom),27(sudo),29(audio),44(video),46(plugdev),60(games),100(users),101(input),108(netdev),997(gpio),998(i2c),999(spi)

    Einmal editiert, zuletzt von JanR ()

  • Wenn mein Skript funktioniert, muss Deines auch funktionieren. Ich mache ja nichts anderes als Du, außer das ich mir die zu schreibenden Daten aus den Fingern sauge statt sie per USB einzulesen.

    Wenn Du jetzt noch mal Dein Skript von Hand ausführst, was passiert dann? Wird der eingelesene Wert ausgegeben (print statement in Deinem Skript)? Was steht hinterher in den beiden Dateien? Setze in die beiden with-Konstrukte auch noch mal print statements und gib dort file_x.name und file_x.mode aus. Wie sehen die aus?

  • So endlich Zeit gefunden. Daher bin ich ja auch so ratlos. Mein skript funktioniert nicht.


    wenn ich in meinem skript x = "test". einfüge und die ser.readline() auskommentiere, funktioniert es wie es soll.


    Gehe davon aus das es mit der ser. readline() zu tun hat. Weiß aber nicht warum und wie ich das ändern kann.


    Setze in die beiden with-Konstrukte auch noch mal print statements und gib dort file_x.name und file_x.mode aus. Wie sehen die aus?

    Da komme ich leider noch nicht mit. Weiß nicht was du damit meinst.

  • im print steht in der Console der Komplette Text der empfangen wird. auch in der append.txt (hab es mal in deine Dateienamen geändert) steht der Text. . Die write.txt. ist jetzt leer. vorher stand Testtext drin