Python:ftp和progressbar 2.3

2024-05-06 12:17:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个使用ftplib的ftp程序,在过去的几天里,我一直在尝试如何实现retrbinary和storbinary的进度条。我正在尝试使用ProgressBar2.3模块,但没有成功地将其与之结合。我认为这可能源于对回调函数工作原理的误解。不管怎么说,这就是我所拥有的。在

import progressbar
import ftplib


ftp = ftplib.FTP()
ftp.connect("host", "port")
ftp.login("user", "pwd")


widgets = ['Downloading: ', Percentage(), ' ', Bar(marker=RotatingMarker()),
       ' ', ETA(), ' ', FileTransferSpeed()]
pbar = ProgressBar(widgets=widgets, maxval=1024).start()

def callback(p):
    for i in range(1024):
        pbar.update(10*i+1)
        pbar.finish()

ftp.storbinary("STOR iTunesSetup.exe", open("iTunesSetup.exe"), callback, blocksize=1024)

我得到了这个错误,尽管这只是我尝试过的许多方法之一:

^{pr2}$

我可以说没有这个回调,ftp服务器工作正常,有足够的空间下载。如果有人能给我一些建议,我会很感激的。在


Tags: 模块函数进度条import程序callbackftpwidgets
1条回答
网友
1楼 · 发布于 2024-05-06 12:17:08

对于未来的访客来说,我就是这样做的。。。在

def handleupload(self, block):
    self.pbar.update(self.pbar.currval+len(block))

def upload(self):
    try:
        if os.path.getsize(self.filename) == 0:
            print "%s 0 bytes passing..." % self.filename
        else:
            print "Uploading %s-%d-bytes" % (self.filename, self.ftp.size(self.filename))
            self.pbar=ProgressBar(widgets=[FileTransferSpeed(),' ', Bar(marker=RotatingMarker()), ' ', 
                                                    Percentage(),' ', ETA()],    maxval=os.path.getsize(self.filename)).start()
            self.ftp.storbinary("STOR " + self.filename, open(self.filename), 
                                                        callback = s.handleupload, blocksize = 1024)
            self.pbar.finish() 
            print "Finished"
    except (error_perm, error_temp, Exception), self.exc:
        print self.exc

相关问题 更多 >