将一个值传递给ftp.retrbinary回调函数

7
我将翻译如下:

我正在编写一个使用FTPLib获取文件的模块。我想找到一种方法,在回调中传递一个值(除了块)。基本上,我的回调函数是

 def handleDownload(block, fileToWrite):
    fileToWrite.write(block)

我需要调用

ftp.retrbinary('RETR somefile', handleDownload)

你是否可以传递一个文件句柄?有没有一种方法可以做到这一点?

2个回答

6
你可以使用lambda函数来让fileToWrite变量局部有效:
fileToWrite = open("somefile", "wb")
ftp.retrbinary("RETR somefile", lambda block: handleDownload(block, fileToWrite))

1
除了使用“write”命令之外,是否还有其他下载文件的方法?我希望能够保留FTP站点上给出的时间戳。 - Shyam Sunder

0

这段代码对我有效。

class File:

    cleared = False

    def __init__(self, filepath):
        self.filepath = filepath

    def write(self,block): 
        if not File.cleared:
            with open(f'{self.filepath}', 'wb') as f:
                File.cleared = True
                with open(f'{self.filepath}', 'ab') as f:
                f.write(block)
        else:
             with open(f'{self.filepath}', 'ab') as f:
                 f.write(block)

ftp.retrbinary("RETR somefile", File(filepath).write)



    

代码应该可以工作,但是你本可以将它写成一个函数而不是整个类。 - Matiiss
一个函数将允许您仅添加最后一个二进制块。 - Eugene
说实话,我甚至不记得在这里发表评论了,所以我忘记了我的想法,那么...继续吧,祝你有美好的一天。 - Matiiss

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接