试图了解其ftplib工作原理.
我正在尝试将文件保存到FTP服务器并实现回调.
文件说:
FTP.storbinary(command, file[, blocksize, callback, rest])
Run Code Online (Sandbox Code Playgroud)
callback 函数定义如文档中所示:
为每个接收到的数据块调用回调函数,使用单个字符串参数给出数据块.
我该如何实现这个回调?retrbinary(读取文件)上的示例回调可能如下所示:
def handle(block):
f.write(block)
print ".",
Run Code Online (Sandbox Code Playgroud)
这将显示正在下载的文件的进度,f即文件对象.
但我对如何实现这一点感到茫然storbinary.
有关如何做到这一点的任何建议?我知道block参数,但如何通过上传调整?
更新:
我有一个回调上传为:
def handle(block):
f.read(block)
print ".",
Run Code Online (Sandbox Code Playgroud)
但正如预期的那样,它给出了错误:
an integer is required
传球int(block)也行不通.
如果你的回调是
def handle(block):
f.write(block)
print ".",
Run Code Online (Sandbox Code Playgroud)
Python具有可以作为params传递的第一类函数 - 这是回调的一点 - 您将函数作为param传递给storbinary调用 -
ftp.storbinary(command="stor someFileNameOnServer", file=open("localFile",'rb'), callback=handle,blocksize=1024)
Run Code Online (Sandbox Code Playgroud)
从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)
Run Code Online (Sandbox Code Playgroud)
os.path.getsize将为您提供文件的总大小(以字节为单位).
| 归档时间: |
|
| 查看次数: |
13443 次 |
| 最近记录: |