Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

ftplib et callback

2 réponses
Avatar
Laurent
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 ?

merci :)

2 réponses

Avatar
Amaury Forgeot d'Arc
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92, 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

Avatar
Laurent
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'.

Une grande partie de Python est écrit en Python, ça rend plus facile les
modifications.


C'est de la surcharge, c'est ça ? (je ne suis pas très versé dans la
prog. objet, mais je m'y intéresse ;) )

En tout cas, merci beaucoup... :)