Python | Datei lässt sich nicht auf Stick speichern

  • Liebe Community,
    ich habe bei einem Pxthon Programm Probleme damit, Dateien auf meinem USB Stcik zu speichern. Anbei die Kerninfos:
    - Das Speichern auf einem beliebigem anderen Ort ist möglich, die Syntax des Programms schließe ich aus
    - Der Stick wird beim booten gemounted. fstab sagt:

    Code
    UUID=16F2-293E /media/usb vfat umask=000, noatime 0

    - Im Ordner Media (ls -l) steht über den Stick

    Code
    drwxrwxrwx 4 root root 8192 Jan 1 1970 usb

    - Über den Desktop (als pi angemeldet) kann ich Dateien beliebig löschen/verändern, bei Dateieigenschaften steht überall "jeder"

    -Programm und Desktop starten automatisch

    Ich habe auf dem Weg dorthin schon einmal mein System zerschossen, jetzt ist es neu aufgesetzt. Habt ihr Ideen? Ein Anfänger verzweifelt^^

  • Python | Datei lässt sich nicht auf Stick speichern? Schau mal ob du hier fündig wirst!

  • Windows-Dateisysteme können nicht mit Linux-Rechten umgehen.

    "umask=000" sorgt dafür das alle neu erstellen Dateien/Verzeichnisse auf dem Datenträger für jeden Lesbar, Beschreibbar und Ausführbar sind und entspricht "chmod 777". Da vFat aber ein Windows-Dateisystem ist können diese Rechte nur simuliert werden.

    Wieso möchtest du denn unbedingt FAT32 verwenden? (vFat)
    Poste mal bitte die Ausgabe von touch /media/usb/test
    Und bitte exakt beschreiben wie du dein Script oder den Befehl zum erstellen der Datei ausführst.

    Das Problem könnte sein, dass deine FAT32-Partition beim Mounten als User und Gruppe root verpasst bekommt. Damit können normale User nicht drauf schreiben.
    Abhilfe könnte die Option "gid" schaffen, wobei du dort die Gruppen-ID des Benutzers angeben müsstest der darauf schreiben können soll...

  • Danke für die schnelle Antwort!
    Ich möchte vfat nutzen, da ich mit dem Programm Bilder mit der picamera erzeuge, und diese dann später per Stick auf meinem 'Wohlfühlsystem' (Windows) nutzen möchte.

    touch /media/usb/test gibt keine Ausgabe

    Der Befehl zum speichern des Bildes ist

    Code
    ...
    
    
    for i, filename in enumerate (cam.capture_continous('/media/usb/bilder/kamera{timestamp}.jpeg', use_video_port=False)):
    ....

    Klappt wie gesagt bei anderen Ordnern.

    Edited once, last by Nebu (June 26, 2016 at 8:35 PM).

  • Du musst absolute Pfade verwenden.
    media/usb/bilder/
    ist nicht absolut, es fehlt das Wurzelverzeichnis bzw sog. Rootverzeichnis " / ". Ohne das am Anfang stehende " / " wird der Pfad beginnend ab dem des Scripts genommen bzw in dem man sich bei Ausführung des Scripts befindet... Wenn du also zB im Verzeichnis /home/pi/ bist und ./script.py ausführst würde es /home/pi/media/usb/bilder/ sein, da du bei deiner Pfadangabe kein " / " am Anfang verwendest.

    Wie genau hast du "touch /media/usb/test" ausgeführt? Ohne oder mit sudo?

    Bitte die Ausgabe folgendes Befehls posten: ls -la /media/usb/

    Am besten machst du copy&paste

  • Es war tatsächlich der Timestamp in der Datei, Danke! touch habe ich mit sudo erstellt, ist auch eine Datei im Verzeichnis. Ich bin sooo, dankbar. Viele Stunden Frust udn nur eine Kleinigkeit.


  • touch habe ich mit sudo erstellt, ist auch eine Datei im Verzeichnis.

    ..Wie war das noch?

    Poste mal bitte die Ausgabe von touch /media/usb/test
    Und bitte exakt beschreiben wie du dein Script oder den Befehl zum erstellen der Datei ausführst.

    :s Wieso schreibt man sowas extra lang und breit dazu? :-/ *seufz*


  • touch /media/usb/test gibt keine Ausgabe

    Der Befehl zum speichern des Bildes ist

    Code
    ...
    
    
    for i, filename in enumerate (cam.capture_continous('/media/usb/bilder/kamera{timestamp}.jpeg', use_video_port=False)):
    ....

    Hat er doch.
    Automatisch zusammengefügt:
    Aus der Dokumentation von picamera:

    Quote

    Note that because timestamp’s default output includes colons (:), the resulting filenames are not suitable for use on Windows. For this reason (and the fact the default contains spaces) it is strongly recommended you always specify a format when using {timestamp}.

    Auf der Seite sind auch weitere Formatbeispiele (ohne Doppelpunkt), falls Du trotzdem gerne einen timestamp im Dateinamen hättest.

    Edited once, last by Manul (June 26, 2016 at 8:58 PM).


  • Hat er doch.

    Nein hat er nicht.
    Ich hab als Befehl touch /media/usb/test gepostet. Siehst du da irgend was von wegen "sudo"? Erst in Beitrag#9 erwähnt er beiläufig den touch Befehl mit sudo ausgeführt zu haben... bedeutet? Er hat NICHT das gemacht worum ich explizit bat. Sorry aber pfffft... denke mir sowas nicht zum ärgern der hilfesuchenden aus

  • Ich habe beides gemacht, beides mit gleichem Ergebnis. Aber Du hast Recht, ich hätte mich klar an die Anweisungen halten sollen.

    Edited once, last by Nebu (June 26, 2016 at 9:40 PM).

  • Naja merk dir das einfach für die Zukunft, sowas macht es den Helfern nur schwerer wenn nicht so berichtet wird wie man es erwartet bzw extra beschreibt. Wenn es jetzt nicht durch ändern von {timestamp} gelöst werden konnte wären noch mehr Beiträge nötig gewesen um dir die benötigte Information einzeln aus der Nase zu ziehen - sowas ist unnötig mühsam.

    BTW:
    Es würde auch {timestamp} funktionieren wenn man denn den Hintergrund versteht. Das Default Format von {timestamp} sieht vor das " : " gesetzt werden, wie zum Beispiel 2016-27-07 12:07:12.346743
    Das Problem hiermit ist aber das FAT32 keine Doppelpunkte in Dateinamen zulässt.
    Also was tun? Das Format von {timestamp} ändern:
    [code=php]for i, filename in enumerate (cam.capture_continous('/media/usb/bilder/kamera{timestamp:%Y%d%m_%H-%M-%S}.jpeg', use_video_port=False)):[/php]

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!