Как и большинство, у меня уходит некоторое время, чтобы привыкнуть к использованию Deferreds, но я постепенно добираюсь.Однако мне не ясно, как я могу обработать ответ и затем вызвать другую команду FTP , используя обработанный ответ при использовании модуля Twisted FTP.Я использую пример FTP-кода в качестве отправной точки.
Я хочу подключиться к 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
функция:
def connectionMade(ftpClient):
# Get a detailed listing of the current directory
fileList = FTPFileListProtocol()
d = ftpClient.list('.', fileList)
d.addCallbacks(getSortedDirectories, fail, callbackArgs=(fileList,))
d.addCallback(enterDirs)
Как видите, я в очередивверх 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
* * * * * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * * * * * * *}}}
fileList
не передается не
getSortedDirectories
, а затем отправляет запросы на загрузку?