Функция retrbinary в библиотеке ftplib
принимает функцию обратного вызова, которая вызывается один раз для каждого извлеченного блока данных.Вы сами пишете эту функцию обратного вызова и, следовательно, можете изменить файлы папок, в которые сохраняются файлы.
Пример кода:
#!/usr/bin/env python
import sys
from ftplib import FTP
ftphost, file_to_retrieve, output_path = sys.argv[1:4]
print "Retreiving %(file_to_retrieve)s from FTP host %(ftphost)s, saving to %(output_path)s" % locals()
ftp = FTP(ftphost)
ftp.login()
outfile = None
def data_callback(data):
global outfile
if outfile is None:
outfile = open(output_path, 'w')
outfile.write(data)
ftp.retrbinary("RETR %s" % file_to_retrieve, data_callback)
if outfile is not None:
outfile.close()
Чтобы получить ftp://ftp.sunet.se/pub/Linux/kernel.org/linux/docs/man-pages/man-pages-3.32.tar.gz
и сохранить его как /tmp/man-pages.tar.gz
,запустите этот код следующим образом:
$ python testftp.py ftp.sunet.se /pub/Linux/kernel.org/linux/docs/man-pages/man-pages-3.32.tar.gz /tmp/man-pages.tar.gz