Python ftplib和storbinary

时间:2011-02-16 19:26:29

标签: python ftplib

试图了解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)也不起作用。

1 个答案:

答案 0 :(得分:5)

如果你的回调是

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

Python有一些可以作为params传递的第一类函数 - 这是一个回调点 - 你将函数作为param传递给storbinary调用 -

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

来自python doc,

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

这纯粹是一种后处理方法,例如:显示传输状态,在每个数据块发送后调用。在发送每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将为您提供文件的总大小(字节)。