Laurent a écrit :
Bonjour !
je débute en python, excusez si ma question a été déjà posée, mais je n'ai pas trouvé de réponses probantes sur google..
en bref : j'ai vu que la fonction de download possède une fonction de callback :
/retrbinary(command, callback[, maxblocksize[, rest]])/
par contre celle d'upload, non.
/storbinary(command, file[, blocksize])/
Cette fonction de callback pourrait servir, par exemple, à mettre à jour une barre d'avancement du tranfert..
Mais dans ce cas, comment peut-on faire pour un upload ?
Tel quel, l'option n'existe pas.
Mais on peut l'obtenir rapidement:
Dans mon programme, j'ai ajouté:
# <<<< début <<<<<<<<<<<<<<<
import ftplib
class MyFTP(ftplib.FTP):
def storbinary(self, cmd, fp, blocksize=8192, callback=None):
'''Store a file in binary mode.'''
self.voidcmd('TYPE I')
conn = self.transfercmd(cmd)
while 1:
buf = fp.read(blocksize)
if not buf: break
conn.sendall(buf)
if callback:
callback(buf)
conn.close()
return self.voidresp()
# >>>> fin >>>>>>>>>>>>>>>>
Le code de la fonction, je l'ai simplement recopié à partir de lib/ftplib.py, en le modifiant un peu : j'ai ajouté le paramètre 'callback'.
Il suffit d'utiliser MyFTP à la place du ftplib.FTP d'origine. La fonction s'utilise comme ceci:
/storbinary(command, file[, blocksize[, callback]])/
et la callback est appelée à chaque bloc, en passant le bloc en paramètre.
Une grande partie de Python est écrit en Python, ça rend plus facile les modifications.
Bonne connexion,
--
Amaury