Timeout beim unzippen

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
sylenz
User
Beiträge: 19
Registriert: Dienstag 21. Juli 2009, 05:12

Guten Morgen Forum!
ich habe mir ein kleines Filetransferprogramm geschrieben, welches aus einem Eingangsordner gezippte Dateien in einen Zielordner entpackt.
Das ganze funktioniert ohne Probleme mit Dateien kleiner ca 25MB.
Bei Dateien welche größer sind, reagiert mein wxPython-Programm noch (Interaktionen mit Controls noch möglich), jedoch scheint er die weitere, sequentielle Abarbeitung des Codes einzustellen.
Er legt die entpackte Zieldatei an, definiert diese jedoch mit 0 Byte.
Wenn ich jetzt die Abarbeitung erneut händisch starte (ButtonClick), lässt er die betroffene Datei aus (da schon vorhanden), und nimmt die nächste - die Datei mit welcher er Probleme hat gibt er aber anscheinend intern (?) wieder frei und zeigt eine Dateigröße X an (Datei ist dennoch nicht komplett vollständig).
Was könnte hier ein Lösungsansatz sein? Eine Pause nach jedem Filetransfer? Ungünstig.

Die unzip als solche sieht folgendermaßen aus (Python 2.5):

Code: Alles auswählen

if isZipped(file):
                            #Unpacking Ziparchives
                            sourceZip = zipfile.ZipFile(os.path.join(root,file), 'r')
                            for name in sourceZip.namelist():
                                if (name.find('.DUMMY)!= -1) or (name.find('.dummy)!= -1):  
                                    outfile = open(os.path.join(target,name), 'wb')
                                    outfile.write(sourceZip.read(name))
                                    outfile.close()
                            sourceZip.close()
                            self.tclLog.write('\n   -> entpackt')
BlackJack

@sylenz: Du müsstest herausfinden, warum an der Stelle mit der Datei abgebrochen wird. Da muss es ja irgendeinen Grund geben. Mal an relevanten Stellen, angefangen mit der die Du gezeigt hast, Ausnahmen loggen, wäre ein Anfang.
sylenz
User
Beiträge: 19
Registriert: Dienstag 21. Juli 2009, 05:12

Danke für den Input, irgendwo in der Funktion wird er sich wohl verabschieden, mal schaun was ich noch rauskrieg.
Dachte nur vllt gibts ne pauschalerklärung für das Phänomen, das muss ja bei anderen auch schon aufgetreten sein ;-)
Benutzeravatar
mkesper
User
Beiträge: 919
Registriert: Montag 20. November 2006, 15:48
Wohnort: formerly known as mkallas
Kontaktdaten:

Ich suche immer so:

Code: Alles auswählen

for name.lower() in sourceZip.namelist():
    if (name.find('.dummy')!= -1):
(da war übrigens ein Quoting-Fehler drin).
Das findet auch Dummy und duMmy etc. ;)
sylenz
User
Beiträge: 19
Registriert: Dienstag 21. Juli 2009, 05:12

Oha, sehr schöner Hinweis, dank dir.
Der Quoting-Fehler war nur ein Copy&Paste-Fehler im Forum :-)

Bin noch auf der Suche, das Script als solches funktioniert einwandfrei wenn ich es mit dummy-files lokal teste. Nur wenn ich das unzippen direkt auf dem Server machen lass tritt das Problem auf.
Werde morgen mal testen ob es was bringt die Zip-file erst in den Zielordner auf dem Server zu kopieren, und dann dort zu entpacken - das Prinzip als solches ist aber dasselbe, weshalb das ganze wohl nichts bringen dürfte.
Sobald ich das Programm schließe, und der filestream automatische beendet wird befüllt er entsprechend die Datei mit Daten ...
Insofern glaub ich fast nicht dass meine eingebauten Exceptions überhaupt anschlagen, aber ich teste nochmal weiter
sylenz
User
Beiträge: 19
Registriert: Dienstag 21. Juli 2009, 05:12

Nur für die Nachwelt:
Ich bin jetzt auf Python 2.6 umgestiegen, habe die extract-Methode in mein Programm implementiert und jetzt funktioniert alles einwandfrei.
Nachvollziehen kann ich den Fehler immer noch nicht, aber zumindest ist das eine angemessene Lösung.
Danke für die Hilfe!
Antworten