Invia un comando NOOP. Questo non fa altro che controllare che la connessione stia andando ancora e se lo fai periodicamente può mantenere la connessione attiva.
Ad esempio:
conn.voidcmd("NOOP")
Se c'è un problema con la connessione allora l'oggetto FTP sarà un'eccezione. Si può vedere dal documentation che le eccezioni sono gettati se c'è un errore:
socket.error e IOError:. Questi sono sollevate dalla connessione socket e sono molto probabilmente quelli che vi interessano
exception ftplib.error_reply: Eccezione sollevata quando viene ricevuta una risposta imprevista dal server.
exception ftplib.error_temp: Eccezione sollevata quando viene ricevuto un codice di errore che indica un errore temporaneo (codici di risposta nell'intervallo 400-499).
exception ftplib.error_perm: Eccezione sollevata quando viene ricevuto un codice di errore che indica un errore permanente (codici di risposta nell'intervallo 500-599).
eccezione ftplib.error_proto: Eccezione sollevata quando viene ricevuta una risposta dal server che non si adatta alle caratteristiche di risposta del File Transfer Protocol, cioè inizia con un numero nel range 1-5.
Pertanto è possibile utilizzare uno try-catch block per rilevare l'errore e gestirlo di conseguenza.
Per esempio, questo esempio di codice prenderà un IOError, dirvi su di esso e poi ripetere l'operazione:
retry = True
while (retry):
try:
conn = FTP('blah')
conn.connect()
for item in list_of_items:
myfile = open('filename', 'w')
conn.retrbinary('stuff', myfile)
### do some parsing ###
retry = False
except IOError as e:
print "I/O error({0}): {1}".format(e.errno, e.strerror)
print "Retrying..."
retry = True
fonte
2013-03-02 04:03:14
'ftplib' sembra non adattarsi al principio Pythonic che ci dovrebbe essere un modo più ovvia da fare qualcosa - o almeno dovresti darmelo su 'voidcmd ('NOOP')' – Axeman