twisted.protocols.ftp.ftp客户和延期

2024-09-28 21:32:46 发布

您现在位置:Python中文网/ 问答频道 /正文

像大多数人一样,我需要一段时间才能习惯使用延迟,但我慢慢地做到了。但是,我不清楚如何处理一个响应,然后在使用Twisted的FTP模块时使用处理后的响应调用另一个FTP命令。我用example FTP code作为起点。在

我想连接到一个FTP服务器,获取所有顶层目录,然后输入每个目录并下载所有文件。在

首先我连接:

creator = ClientCreator(reactor, FTPClient, config.opts['username'], config.opts['password'], passive=config.opts['passive'])
creator.connectTCP(config.opts['host'], config.opts['port']).addCallback(connectionMade).addErrback(connectionFailed)
reactor.run()

它连接成功,因此调用了我的connectionMade函数:

^{pr2}$

如您所见,我排队getSortedDirectories,然后enterDirs。在

def getSortedDirectories(result, fileListProtocol):
    # Go through all directories from greatest to least
    dirs = [directory for directory in sorted(fileListProtocol.files, reverse=True) if directory['filetype'] == 'd']
    return dirs

我的问题是,如何浏览enterDirs中的目录?在

def enterDirs(dirs):
    for directory in dirs:
        print "We'd be entering '%s' now." % directory

我是否应该将ftpClient传递给enterDirs,就像fileList被传递给{},然后发出下载请求吗?在

d.addCallback(enterDirs, callbackArgs=(ftpClient,))

def enterDirs(dirs, ftpClient):
    for directory in dirs:
        fileList = FTPFileListProtocol()
        d = ftpClient.list(directory, fileList)
        d.addCallbacks(downloadFiles, fail, callbackArgs=(directory, fileList, ftpClient))

def downloadFiles(result, directory, fileListProtocol, ftpClient):
    for f in fileListProtocol.files if f.filetype == '-':
        fileConsumer = FileConsumer()
        ftpClient.retrieveFile(os.path.join(directory['filename'], file['filename']), fileConsumer)

这是最好的方法吗?在


Tags: in目录configfordefftpdirectoryreactor
1条回答
网友
1楼 · 发布于 2024-09-28 21:32:46

Should I be passing ftpClient to enterDirs like fileList is passed to getSortedDirectories and then make my download requests? ... Is this the best approach?

我确实认为将client对象显式地作为参数传递确实是最好的方法大多数情况下,它既简单又优雅。主要的替代方法是编写一个类并将客户机对象存储到一个实例变量中,这看起来有点麻烦;在我看来,使用全局变量是最不可取的选择(全局变量越少越好!-). 在

相关问题 更多 >