Informationen über USB einlesen und in Datei speichern

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • 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

  • Informationen über USB einlesen und in Datei speichern? Schau mal ob du hier fündig wirst!

  • 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
    with open(dateiname, "w") as file_:
        file_.write(inhalt)
    with open(dateiname1, "a") as file_:
        file_.write(inhalt)
  • 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
    ls -ld /home/pi
    ls -l /home/pi/LOG_D.txt
    ls -l /home/pi/test.txt
    tail /home/pi/LOG_D.txt
    tail /home/pi/test.txt
    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 (11. Oktober 2018 um 09:36)

  • 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.

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!