OVH Cloud OVH Cloud

Exemple pygtk thread et progressbar

3 réponses
Avatar
mrs.spambox
Bonjour, je cherche un exemple simple d'un petit prog python qui
lancerait un thread et qui suivrait l'=E9volution de l'activit=E9 de ce
thread par une progressbar.
Mon but est d'envoy=E9 des (gros) fichiers par ftp suivi par une
progressbar. J'utilise la fameuse boucle while
gtk.events_pending():gtk.main_iteration() entre les =E9tapes pour mettre
=E0 jour l'UI mais le temps de transfert des fichiers =E9tant long, mais
il n'est pas acceptable d'avoir l'ui freez=E9 pendant les transferts.

Merci de vos retours

Cdlt,
MRS

3 réponses

Avatar
Do Re Mi chel La Si Do
Bonjour !

Pour suivre un transfert FTP par morceau, il faut gérer le FTP par blocs, et
non par fichiers entiers. Comme ça, tu auras la main après chaque bloc. A
choisir, la bonne taille des blocs (perso, je suggère 1, 8 ou 16 ko).

@-salutations

Michel Claveau
Avatar
mrs.spambox
Bonjour,

j'ai suivi votre idée mais je n'arrive pas à faire quelque chose de
moins moche que ça :
fd = file(self.pathsrf,'rb')
stream = file('siebel.part','w+b')
stream.write(fd.read(8192))
stream.flush()
stream.seek(0)
ftp.storbinary("STOR siebel.srf", stream)
self.progressbar.pulse()
while gtk.events_pending():gtk.main_iteration()
szfile=os.stat(self.pathsrf)[ST_SIZE]
ptseek92
while ptseek < szfile :
stream.seek(0)
stream.write(fd.read(8192))
stream.flush()
stream.truncate()
stream.seek(0)
ftp.storbinary("APPE siebel.srf", stream)
ptseek += 8192
self.progressbar.pulse()
while gtk.events_pending():gtk.main_iteration()
stream.close()
os.remove('siebel.part')
fd.close()

Existe t il un moyen de convertir une string en un file object à la
volée afin de pouvoir faire quelque chose du genre :
ftp.storbinary("STOR siebel.srf",
(FileObject*)stream.write(fd.read(8192)))

Merci
Avatar
Amaury Forgeot d'Arc
Existe t il un moyen de convertir une string en un file object à la
volée afin de pouvoir faire quelque chose du genre :
ftp.storbinary("STOR siebel.srf",
(FileObject*)stream.write(fd.read(8192)))

Merci



Je ne connais pas bien le module ftplib, mais on peut utiliser un objet
StringIO pour faire un "fichier en mémoire":

from cStringIO import StringIO
ftp.storbinary("STOR siebel.srf", StringIO(fd.read(8192)) )

Amaury