[PIPython] Ftp
Simone Piunno
pioppo
Ven 19 Nov 2004 15:16:44 CET
On Friday 19 March 2004 17:32, Gianluca Di Carlo wrote:
> Salve,
> utilizzando ftplib o wxFTP è possibile conoscere in ogni momento la
> quantità di byte già inviati? Vorrei realizzare una barra di
> progressione legata all'upload di file via ftp.
Use the source, Luke...
Non si chiama Open Source per niente.
def storbinary(self, cmd, fp, blocksize=8192):
'''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)
conn.close()
return self.voidresp()
Questo è il metodo che invochi per fare l'upload, lo trovi nel file ftplib.py
della libreria standard di python.
Normalmente gli passi un file aperto in fp... o meglio... gli passi un oggetto
dotato del metodo .read()...
Il metodo viene invocato per blocchi, ecco quindi come fare la barra di
progressione usando il pattern Observer (supponendo che fp sia seekable oltre
che readable):
class ProgBar:
def __init__(self):
self.size = 0
self.current = 0
def update_display(self):
# qui ridisegna la barra di progressione
class FileWithProgBarObserver:
"si comporta come un file che può essere letto"
def __init__(self, fp, bar=None):
self._fp = fp
self._bar = bar
fp.seek(0, 2)
bar.size = fp.tell()
fp.seek(0, 0)
def read(self, blocksize):
self._bar = fp.tell()
self._bar.update_display()
return self.__fp(blocksize)
dopodichè, invece di
fp = open('pippo')
ftp.storbinary('STOR pippo', fp)
fp.close()
puoi fare:
fp = FileWithProgBarObserver(file('pippo'), ProgBar())
ftp.storbinary('STOR pippo', fp)
fp.close()
e la barra di progressione sarà aggiornata e ridisegnata ad ogni blocco da 8
kappa.
--
http://thisurlenablesemailtogetthroughoverzealousspamfilters.org
More information about the Python
mailing list