试图了解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)
也不起作用。
答案 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将为您提供文件的总大小(字节)。