Reihenfolge der Befehle

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
captain
User
Beiträge: 3
Registriert: Donnerstag 21. Juni 2012, 14:42

Guten Abend,

ich muss mich jetzt an euch wenden, denn ich verweifel bald ;-).

Ich arbeite gerade an einem Backup-Skript, welches erst einige Dateien in einen temporären Ordner kopiert, dann einige Dateien selbst erstellt und schließlich den ganzen temp. Ordner komprimieren soll.
Leider scheine ich einen Fehler zu machen, den ich momentan nicht sehe, denn die vom Skript geschriebenen Dateien werden, anders als die kopierten, nicht richtig komprimiert. Oft sind sie gänzlich leer, manchmal sind die ersten Zeilen enthalten. Im temp. Ordner sind diese übrigens vollständig.
So möchte ich zum Beispiel alle Datenbanken einer MySql-Tabelle sichern:

Code: Alles auswählen

if self.mysql_root_password:
    password = "--password=" + self.mysql_root_password
    with open(backup_dir + '/databases.sql','wb') as file:
        subprocess.Popen( ('mysqldump', '--user=root', password, '-A'), stdout=file )
Wie gesagt, im temp. Ordner ist die Datei vollständig beschrieben enthalten. Nachdem ich den Ordner aber komprimiere ist die Datei oft leer oder enthält die ersten ca. 50 Zeilen (von mehr als 1000).

Folgendermaßen komprimiere ich die Dateien:

Code: Alles auswählen

os.chdir(dir)
with ZipFile(zip_name, 'w') as zip:
    for dirpath, dirnames, filenames in os.walk('./'):
        for filename in filenames:
            zip.write(os.path.join(dirpath, filename))
Anscheinend werden die Dateien komprimiert, bevor sie gänzlich geschrieben werden, denn ein time.sleep(60) brachte abhilfe. Dennoch möchte ich natürlich auf so einen Ansatz verzichten, zumal die Datei auch mehr als 60 Sek. brauchen kann.

Was übersehe ich hier?
Danke schonmal, für jede Art von Hilfe :-)
Zuletzt geändert von Anonymous am Mittwoch 22. August 2012, 23:25, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Code-Tags gesetzt.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Ja `subprocess.Popen` ist asynchron. Du suchst `subprocess.call`.
captain
User
Beiträge: 3
Registriert: Donnerstag 21. Juni 2012, 14:42

Ich danke dir vielmals :-). Jetzt funktionierts auch!
Antworten