gpt4 book ai didi

Python ftplib 和 storbinary

转载 作者:太空宇宙 更新时间:2023-11-03 14:34:02 24 4
gpt4 key购买 nike

试图了解 ftplib 的工作原理。

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

文档说:

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

回调 函数在文档中定义:

The callback function is called for each block of data received, with a single string argument giving the data block.

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

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

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

但是我不知道如何用 storbinary 来实现它。

关于如何做到这一点有什么建议吗?我知道 block 参数,但如何在上传时调整它?

更新:

我有一个上传回调:

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

但不出所料,它给出了错误:

需要一个整数

传递 int(block) 也不起作用。

最佳答案

如果你的回调是

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

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

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

来自 python 文档,

callback 是一个可选的单参数 callable,它在每个数据 block 发送后被调用。

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

关于Python ftplib 和 storbinary,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5021132/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com