Python ftplib 和 storbinary
我在尝试理解 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 个回答
5
如果你的回调函数是这样的:
def handle(block):
f.write(block)
print ".",
在Python中,函数可以像普通变量一样使用,可以作为参数传递——这就是回调函数的意思——你把这个函数作为参数传给storbinary调用。
ftp.storbinary(command="stor someFileNameOnServer", file=open("localFile",'rb'), callback=handle,blocksize=1024)
根据Python的文档,
回调函数是一个可选的单参数可调用对象,它会在每块数据发送后被调用。
这纯粹是一个后处理的方法,比如用来显示传输状态,它会在每块数据发送后被调用。上面的例子中,它会在每发送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可以给你文件的总大小(以字节为单位)。