好吧,您的答案就在眼前:retrbinary方法接受对函数的引用作为第二个参数,该函数在从ftp连接中检索文件内容时被调用。
这是一个简单的示例:
#!/usr/bin/env pythonfrom ftplib import FTPdef writeFunc(s): print "Read: " + sftp = FTP('ftp.kernel.org') ftp.login()ftp.retrbinary('RETR /pub/README_about_BZ2_FILES', writeFunc)您应该实现writeFunc,以便它实际上将读取的数据附加到内部变量(类似这样),该内部变量使用可调用对象:
#!/usr/bin/env pythonfrom ftplib import FTPclass Reader: def __init__(self): self.data = "" def __call__(self,s): self.data += sftp = FTP('ftp.kernel.org') ftp.login()r = Reader()ftp.retrbinary('RETR /pub/README_about_BZ2_FILES', r)print r.data更新: 我意识到Python标准库中有一个用于此类事情的模块StringIO:
#!/usr/bin/env pythonfrom ftplib import FTPfrom io import StringIOftp = FTP('ftp.kernel.org') ftp.login()r = StringIO()ftp.retrbinary('RETR /pub/README_about_BZ2_FILES', r.write)print r.getvalue()更新2: StringIO已转入io。结合@TimRichardson的评论。:



