Hallo zusammen,
ich bin noch recht neu in Sachen Python und habe folgendes Problem:
Mein Programm holt per aktiv FTP von einem Server Daten ab. Das klappt auch alles wunderbar. Nur wenn wärend einer laufenden Datenübertragung mal die Verbindung ausfällt hängt der Abholprozess (RETRbinary) der FTPlib und mein Programm bleibt stehen bis ich es mit STRG-C beende.
Ich hab keine Idee wie ich das machen könnte das er solche Hänger selber merkt und den Transfer abbricht und später wieder versucht. Hoffe ihr könnt mir helfen ?
Vielen Dank !
Thomas
FTPlib und Verbindungsausfälle
Seit Python 2.6 kannst du ftplib.FTP() doch ein Timeout mitgeben. Das dürfte genau das sein, was du suchst:
Du kannst nämlich optional ein Offset in Bytes mitgeben, von wo aus der Transfer weitergehen soll. Würde ich natürlich mit `os.path.exists()` kombinieren, um zu prüfen, ob schon eine Datei lokal bei dir existiert. Und natürlich `ftplib.error_reply` abfangen, was geworfen wird, wenn der Server das Offset-Argument nicht versteht. In dem Fall müsste die Übertragung halt trotzdem bei Null begonnen werden.
Zum Wiederaufnehmen des Transfers (ab Python 2.7) im Groben:The optional timeout parameter specifies a timeout in seconds for blocking operations like the connection attempt (if is not specified, the global default timeout setting will be used).
Code: Alles auswählen
deine_ftpsession.retrbinary('RETR ' + dateiname, callback, rest=os.path.getsize(pfad_zu_lokaler_datei))