Seite 1 von 1

Timeout beim unzippen

Verfasst: Freitag 5. Februar 2010, 08:08
von sylenz
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')

Verfasst: Freitag 5. Februar 2010, 08:30
von 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.

Verfasst: Freitag 5. Februar 2010, 08:57
von sylenz
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 ;-)

Verfasst: Freitag 5. Februar 2010, 10:35
von mkesper
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. ;)

Verfasst: Freitag 5. Februar 2010, 13:45
von sylenz
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

Verfasst: Mittwoch 24. Februar 2010, 07:05
von sylenz
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!