3

试图了解其ftplib工作原理。

我正在尝试将文件保存到 FTP 服务器并实现回调。

文档说:

FTP.storbinary(command, file[, blocksize, callback, rest])

callback函数在文档中定义:

为接收到的每个数据块调用回调函数,并使用单个字符串参数给出数据块。

如何实现此回调?(读取文件)上的示例回调retrbinary可能如下所示:

def handle(block):
    f.write(block)
    print ".", 

这将显示正在下载的文件的进度,f即文件对象。

但我不知道如何用storbinary.

关于如何做到这一点的任何建议?我知道block参数,但是如何通过上传来调整它?

更新:

我有一个上传回调:

def handle(block):
    f.read(block)
    print ".",

但正如预期的那样,它给出了错误:

an integer is required

过关int(block)也不行。

4

1 回答 1

5

如果您的回调是

def handle(block):
    f.write(block)
    print ".", 

Python具有可以作为参数传递的一流函数-这是回调的要点-您将函数作为参数传递给storbinary调用-

ftp.storbinary(command="stor someFileNameOnServer", file=open("localFile",'rb'), callback=handle,blocksize=1024)

从python文档,

callback 是一个可选的可调用单参数,在发送后在每个数据块上调用。

它纯粹是一种后处理方法,例如显示传输状态,在每个数据块发送后调用。上面会在每发送 1024 个字节的数据后调用它。

要实现传输状态,像这样-

sizeWritten = 0
totalSize = someMethodToGetTotalBytesInFile()
def handle(block):
    global sizeWritten
    sizeWritten += 1024
    percentComplete = sizeWritten / totalSize
    print "%s percent complete" %str(sizeWritten / totalSize)

os.path.getsize 将为您提供文件的总大小(以字节为单位)。

于 2011-02-16T19:45:09.830 回答