FTP status problems. (Again)

marduk marduk+news at letterboxes.org
Sat Sep 17 00:42:28 EDT 2005


On Fri, 2005-09-16 at 19:27 -0700, Nainto wrote:
> Hello, I have posted before about trying to find the status of an FTP
> uplaod but couldn't get anything to work. After some more searching I
> found
> http://groups.google.com/group/comp.lang.python/browse_thread/thread/76be9a994547db4/91917c906cdc04d4?q=ftp+progress&rnum=1#91917c906cdc04d4
> but it does not seem to work because it just uploads the file and does
> not print a . onto the screen. HEre is the code I have when I'm using
> the code from that link.
> import ftplib
> import os
> class dot_FTP(ftplib.FTP):
> 	def storbinary(self, cmd, fp, blocksize=8192):
> 		self.voidcmd('TYPE I')
> 		conn = self.transfercmd(cmd)
> 		while 1:
> 			buf = fp.read(blocksize)
> 			if not buf: break
> 			conn.send(buf)
> 			sys.stdout.write('.')
> 			sys.stdout.flush()
> 		conn.close()
> 		return self.voidresp()
> 
> 
> ftp = ftplib.FTP("FTPADDRESS")
> ftp.login("user","pass")
> file = "/file"
> ftp.storbinary("STOR " + file, open(file, "rb"), 1024)
> ftp.quit()
> Does anyone know why this is not working? IS there any other way to
> find out when a chunc has been sent or the bytes uploaded of a file?
> Thanks.
> 

... and I haven't tried this myself, but you should be able to subclass
the builtin file object and prepare your own read() method.  Something
like

class ProgressFile(file):

    def read(self, size = None):
        print '.',

        if size is not None:
            return file.read(self, size)
        else:
            return file.read()

May need some tweaking.. then store the file as

ftp.storbinary("STOR " + file, ProgressFile(file, "rb"), 1024)

Give it a try..

-m




More information about the Python-list mailing list