dd alternative in Python?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
linny
User
Beiträge: 4
Registriert: Freitag 13. Oktober 2006, 01:37

Freitag 13. Oktober 2006, 01:43

Hallo liebe Forum Gemeinde.
Ich bin noch relativ neu in der Pythonprogrammierung und erst recht hier im Forum. :)
Trotzdem brennt mir eine wichtige Frage auf der Seele.

Ich soll ein Programm schreiben (unter Linux), das Speicherkarten (SD,MMC, usw.) kopiert. Das heißt es soll ein Image einer Mastercard erstellt werden und dann auf biszu 8 Karten gleichzeitig kopiert werden.
Ich weiß, dass es z.b. mit dem dd Befehl von der Shell aus funktioniert. Leider gibt dd aber keine Fortschrittsinformationen aus. Ich komme also nicht drumherum sowas selber zu schreiben.

Jetzt meine Frage. Gibt es in Python irgendeine Möglichkeit direkt auf ein Blockorientiertes Gerät zuzugreifen und davon ein Image zu erstellen, bzw. das image dann wieder blockweise auf ein gerät zu schreiben?

Vielen Dank im voraus.

Linny.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Freitag 13. Oktober 2006, 09:03

linny hat geschrieben:Ich weiß, dass es z.b. mit dem dd Befehl von der Shell aus funktioniert. Leider gibt dd aber keine Fortschrittsinformationen aus.
Hallo Linny!

Willkommen im Python-Forum!

``dd`` gibt immer dann Statusinformationen aus, wenn man an das laufende Programm mit dem Programm ``kill`` das Signal ``USR1`` schickt.

In der englischen MAN-Page von dd ist diese Information ganz unten zu finden.

Manuell lässt sich das ausnützen, wenn man in einer anderen Konsole mit ``watch`` alle paar Sekunden das Signal schickt.

Mit Python lässt sich ``dd`` mit dem Modul ``subprocess`` ansteuern. Damit könnte man dann auch den STDERR-Kanal abhorchen und in einem zweiten Thread alle paar Sekunden ein "USR1" an ``dd`` schicken.

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
linny
User
Beiträge: 4
Registriert: Freitag 13. Oktober 2006, 01:37

Dienstag 17. Oktober 2006, 01:02

Danke erstmal für die Antwort und die Begrüßung und Entschuldigung für die späte Reaktion.
ich war ein paar Tage weg. :)

ich hab mein diesbezügliches Problem bereits anderweitig gelöst.
ich kann ja einfach das Device direkt öffnen und einfach nach und nach alle Blocks mit der jeweiligen Blockgröße auslesen und auf Platte speichern.

Jetzt stehe ich allerdings vor einem anderen viel größeren Problem und ich hab mir schon die finger blutig gegoogelt.

Ich wollte die Änderungen (einsetzen/entfernen) der Speicherkarten per HAL überwachen. Jetzt hab ich natürlich das Problem, dass DBUS nur den glib mainloop unterstützt und ich den ja nunmal nicht in einer QT Anwendung benutzen kann.

Dachte ich mir, machste das eben per DCOP und dem KDED und dem medianotifier.

Jetzt weiß ich aber nicht, wie ich permanent auf DCOP lauschen kann, so daß in meinem Programm ein Event ausgelöst wird wenn KDED einen mediawechsel meldet.
Klar geht das natürlich mit ner while schleife, aber dann steht ja mein programm. Das Lauschen soll also im Hintergrund passieren.

Hat da vielleicht jemand ne Idee? Stichwort Signals/Slots oder ähnliches?

gruß
Linne
Benutzeravatar
Blattlaus
User
Beiträge: 55
Registriert: Donnerstag 24. August 2006, 08:55

Dienstag 17. Oktober 2006, 09:20

Nein, die antwort lautet Threads.

Code: Alles auswählen

import threading
from time import sleep

class simpleThread(threading.Thread):
    
    def __init__(self, number):
        self.dead = False
        self.number = number
        threading.Thread.__init__(self) # thread initialisieren
    
    def run(self):
        while not self.dead:
            sleep(0.5)
            print "loop from thread ", self.number
            

s1 = simpleThread(1)
s2 = simpleThread(2)

s1.start()
s2.start()
linny
User
Beiträge: 4
Registriert: Freitag 13. Oktober 2006, 01:37

Dienstag 17. Oktober 2006, 11:48

Super, danke schön. Wusste gar nicht, dass python threads unterstützt. :)
Man soll halt nachts nicht mehr arbeiten, nein soll man wirklich nicht.... :D
Benutzeravatar
Blattlaus
User
Beiträge: 55
Registriert: Donnerstag 24. August 2006, 08:55

Dienstag 17. Oktober 2006, 12:08

linny hat geschrieben:Super, danke schön. Wusste gar nicht, dass python threads unterstützt. :)
Äh...?
linny
User
Beiträge: 4
Registriert: Freitag 13. Oktober 2006, 01:37

Dienstag 17. Oktober 2006, 18:06

wie gesagt, bin ziemlich neu bei python. vielleicht sollte ich die Doku mal aufmerksamer lesen *kopfkratz.. :roll:
Antworten