Textdatei auf beliebigen USB-Stick speichern

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hallo,

    mein Programm erstellt eine Textdatei. Diese soll direkt auf einen USB-Stick gespeichert werden. Der Pfad des Sticks ist immer /media/"Name des USB-Sticks". Die Textdatei wird mit folgendem Befehl erzeugt:


    Code
    outfile = open('/media/"Name des USB-Sticks"/Test.txt','w')

    Der Pfad in dem die Textdatei gespeichert werden soll, ändert sich jedoch, wenn man verschiedene USB-Sticks mit unterschiedlichem Namen in den USB-Port steckt.

    Wie kann ich es realisieren, dass ich die Datei immer auf das eingesteckte Speichermedium speichere, ohne den Label-Namen des Speichermediums zu verwenden? Oder ist es möglich den Name des eingestickten Sticks auszulesen und als Variable zu deklarieren und so als Pfad anzugeben?

    Vielen Dank im Voraus.

    • Offizieller Beitrag


    Die Sticks haben alle den gleichen Pfad "/dev/sda1". Ich habe diesen Pfad im Programm eingebunden, doch es erscheint die Fehlermeldung:

    IOError: Not a directory: 'dev/sda1/Testdaten.txt'

    Du müsstest das ganze dann noch Mounten.

    Code
    mount /dev/sda1 /GEWÜNSCHTES/VERZEICHNIS/

    Auf diesen Pfad kannst du dann zugreifen.

  • Sorry.... Das war ein Tippfehler....

    Ich will das Ganze für jeden xbeliebigen Stick und nicht für eine Auswahl an Sticks.

    Die Datei soll auf jeden USB-Stick gespeichert werden egal wie sein Label ist. Es ist immer nur ein USB Stick eingesteckt, es muss also nicht zwischen verschiedenen Sticks unterschieden werden.

    • Offizieller Beitrag

    Ok, ich würde es so machen:
    du machst ein mount ohne USBSticks
    dann solltest du ungefähr sowas zurückkriegen

    Wenn du jetzt nen Stick anschliessen würdest, würde sich der obere mount befehl ja verändern, da eine Zeile dazukommt. und das prüfst du ab:
    [code=php]
    import subprocess
    def get_drive():
    mount = subprocess.Popen(
    ["mount"],
    stdout = subprocess.PIPE,
    stderr = subprocess.PIPE
    )
    out, error = mount.communicate()
    for line in out.split("\n"):
    if not line.startswith("sysfs on /sys") and not line.startswith("proc on /proc"): #usw, bis du alle zeilenanfänge von oben drinne hast
    return line

    get_drive()[/php]

    Das Ergebnis musst dir dann noch zurecht splitten, aber das sollte ja kein problem sein

    Edit: Man könnte die ganzen Wert von Oben auch in ein Dictionary reinhauen und das abfragen....

    • Offizieller Beitrag

    logo.

    Du hast ja ein Programm was immer eine Datei auf einen USB stick schreiben soll, egal wie er heisst und wo er gemounted wird, richtig? also machst du ein "mount" auf der Konsole (ohne angesteckte usbsticks). somit erhällst du eine Liste alle gemounteter Devices. Diese Liste kopierst du dir irgendwo hin (brauchst du für die If not Zeile)

    Jetzt hast du dein Programm, welches irgendwann die Datei schreiben soll aber noch nicht weiss wohin. Nun ruft das Programm die Funktion get_drive() auf und ruft im Rahmen dieser Funktion ein "mount" auf. es speichert in der Variable out die gleiche Liste (+1 Eintrag mehr, weil ja mittlerweile der USB Stick dransteckt) und vergleicht diese mit den ganzen Zeilenanfängen aus deinem ersten "mount". Es fliegen nach und nach alle Zeilen raus und nur die Zeile, welche deinen USB Stick (+mountpoint, options usw) benennt bleibt übrig und wird returned..

    diese Zeile muss dann noch weiterverarbeitet werden, ich wollte ja bloss eine Möglichkeit aufzeigen.

    Hoffe das war halbwegs verständlich.

  • Habe es hinbekommen =)... Es zeigt mir jetzt den Namen des Sticks an. Vielen Dank nochmal =)

    Danke für den Kommentar, habe es versucht mit löschen der Zeichen vor und nach dem Namen des Sticks.

    In deinem Code ist ein kleiner Fehler... es muss so heißen:

    Code
    outfile = open(get_drive()+"/Test.txt",'w')

    Vielen Dank =)

  • Hallo,

    wenn der Name immer "media/stick/..." ist, kann man mit FindFirst und FindNext feststellen, welche Dateien es unter "/media/" gibt (falls der Stick nicht ganz leer ist). Die zweite Ebene ist dann der Stick-Name

Jetzt mitmachen!

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