FTPlib und Verbindungsausfälle

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
koetom
User
Beiträge: 5
Registriert: Freitag 3. Februar 2012, 07:38

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
Benutzeravatar
snafu
User
Beiträge: 6738
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Seit Python 2.6 kannst du ftplib.FTP() doch ein Timeout mitgeben. Das dürfte genau das sein, was du suchst:
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).
Zum Wiederaufnehmen des Transfers (ab Python 2.7) im Groben:

Code: Alles auswählen

deine_ftpsession.retrbinary('RETR ' + dateiname, callback, rest=os.path.getsize(pfad_zu_lokaler_datei))
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.
koetom
User
Beiträge: 5
Registriert: Freitag 3. Februar 2012, 07:38

Danke, manchmal sieht man den Wald vor lauter Bäumen nicht. :oops:
Antworten