ftplib — Клиент протокола FTP
Исходный код: Lib/ftplib.py
В этом модуле определен класс FTP и несколько связанных элементов. Класс FTP реализует клиентскую сторону протокола FTP. Его можно использовать для написания программ Python, выполняющих различные автоматизированные задачи FTP, такие как создание копий других серверов FTP. Он также используется модулем urllib для обработки URL, использующих FTP. Дополнительную информацию о протоколе FTP (File Transfer Protocol) можно найти в RFC 959.
Вот пример сеанса, использующего модуль ftplib:
>>> from ftplib import FTP
>>> ftp = FTP('ftp.debian.org') # connect to host, default port
>>> ftp.login() # user anonymous, passwd anonymous@
'230 Login successful.'
>>> ftp.cwd('debian') # change into "debian" directory
>>> ftp.retrlines('LIST') # list directory contents
-rw-rw-r-- 1 1176 1176 1063 Jun 15 10:18 README
...
drwxr-sr-x 5 1176 1176 4096 Dec 19 2000 pool
drwxr-sr-x 4 1176 1176 4096 Nov 17 2008 project
drwxr-xr-x 3 1176 1176 4096 Oct 10 2012 tools
'226 Directory send OK.'
>>> ftp.retrbinary('RETR README', open('README', 'wb').write)
'226 Transfer complete.'
>>> ftp.quit()
Модуль определяет следующие элементы:
-
class ftplib.FTP([host[, user[, passwd[, acct[, timeout]]]]]) -
Возвращает новый экземпляр класса
FTP. При указании host вызывается методconnect(host). При указании user дополнительно вызывается методlogin(user, passwd, acct), (где passwd и acct по умолчанию равны пустой строке, если не указаны). Необязательный параметр timeout задает таймаут в секундах для блокирующих операций, таких как попытка подключения (если не указан, используется глобальный таймаут по умолчанию).Изменено в версии 2.6: Добавлен параметр timeout.
-
class ftplib.FTP_TLS([host[, user[, passwd[, acct[, keyfile[, certfile[, context[, timeout]]]]]]]]) -
Подкласс
FTP, который добавляет поддержку TLS к FTP, как описано в RFC 4217. Подключается к порту 21 по умолчанию, неявно обеспечивая безопасность соединения FTP-управления перед аутентификацией. Для обеспечения безопасности канала данных необходимо явно запросить его, вызвав методprot_p(). Параметр context — объектssl.SSLContext, который позволяет объединить параметры конфигурации SSL, сертификаты и закрытые ключи в одну (возможно, долгоживущую) структуру. Для ознакомления с лучшими практиками обратитесь к разделу «Учетные соображения безопасности».Параметры keyfile и certfile — это устаревшая альтернатива context. Они могут указывать на файлы закрытого ключа и цепочки сертификатов (соответственно) в формате PEM для SSL-соединения.
Введено в версии 2.7.
Изменено в версии 2.7.10: Добавлен параметр context.
Вот пример сеанса, использующего класс
FTP_TLS:>>> from ftplib import FTP_TLS >>> ftps = FTP_TLS('ftp.python.org') >>> ftps.login() # login anonymously before securing control channel >>> ftps.prot_p() # switch to secure data connection >>> ftps.retrlines('LIST') # list directory content securely total 9 drwxr-xr-x 8 root wheel 1024 Jan 3 1994 . drwxr-xr-x 8 root wheel 1024 Jan 3 1994 .. drwxr-xr-x 2 root wheel 1024 Jan 3 1994 bin drwxr-xr-x 2 root wheel 1024 Jan 3 1994 etc d-wxrwxr-x 2 ftp wheel 1024 Sep 5 13:43 incoming drwxr-xr-x 2 root wheel 1024 Nov 17 1993 lib drwxr-xr-x 6 1094 wheel 1024 Sep 13 19:07 pub drwxr-xr-x 3 root wheel 1024 Jan 3 1994 usr -rw-r--r-- 1 root root 312 Aug 1 1994 welcome.msg '226 Transfer complete.' >>> ftps.quit() >>>
-
exception ftplib.error_reply -
Исключение, генерируемое при получении неожиданного ответа от сервера.
-
exception ftplib.error_temp -
Исключение, генерируемое при получении кода ошибки, указывающего на временную ошибку (коды ответов в диапазоне 400–499).
-
exception ftplib.error_perm -
Исключение, генерируемое при получении кода ошибки, указывающего на постоянную ошибку (коды ответов в диапазоне 500–599).
-
exception ftplib.error_proto -
Исключение, генерируемое при получении ответа от сервера, который не соответствует спецификациям протокола передачи файлов, т. е. начинается с цифры в диапазоне 1–5.
-
ftplib.all_errors -
Множество всех исключений (в виде кортежа), которые могут быть подняты методами экземпляров
FTPв результате проблем с подключением FTP (по сравнению с ошибками программирования, допущенными вызывающей стороной). Это множество включает четыре перечисленных выше исключения, а такжеsocket.errorиIOError.
См. также
-
Modulenetrc -
Парсер формата файла
.netrc. Файл.netrcобычно используется клиентами FTP для загрузки информации об аутентификации пользователя перед запросом.
Файл Tools/scripts/ftpmirror.py в дистрибутиве исходного кода Python — это скрипт, который может зеркалить FTP-сайты или их части, используя модуль ftplib. Его можно использовать в качестве расширенного примера применения этого модуля.
1. Объекты FTP
Некоторые методы доступны в двух вариантах: один для работы с текстовыми файлами, а другой — с двоичными файлами. Они названы в соответствии с командой, которая используется, за которой следует lines для текстовой версии или binary для двоичной версии.
FTP экземпляры имеют следующие методы:
-
FTP.set_debuglevel(level) -
Устанавливает уровень отладки экземпляра. Это управляет количеством выводимой информации отладки. Значение по умолчанию,
0, не генерирует информацию об отладке. Значение1генерирует умеренное количество информации об отладке, обычно по одной строке на запрос. Значение2или выше генерирует максимальное количество информации об отладке, регистрируя каждую строку, отправленную и полученную по управляющему соединению.
-
FTP.connect(host[, port[, timeout]]) -
Подключается к указанному хосту и порту. Порт по умолчанию —
21, как указано в спецификации протокола FTP. Редко требуется указывать другой порт. Эта функция должна вызываться только один раз для каждого экземпляра; ее не следует вызывать вообще, если хост был указан при создании экземпляра. Все другие методы могут быть использованы только после подключения.Необязательный параметр timeout задаёт таймаут в секундах для подключения. Если параметр timeout не указан, используется глобальный таймаут по умолчанию.
Изменено в версии 2.6: Добавлен параметр timeout.
-
FTP.getwelcome() -
Возвращает сообщение приветствия, отправленное сервером в ответ на первоначальное подключение (это сообщение иногда содержит предупреждения или справочную информацию, которая может быть полезна пользователю).
-
FTP.login([user[, passwd[, acct]]]) -
Вход под указанным пользователем user. Параметры passwd и acct являются необязательными и по умолчанию равны пустой строке. Если пользователь user не указан, он устанавливается по умолчанию в
'anonymous'. Если user равен'anonymous', то значение passwd по умолчанию равно'anonymous@'. Эта функция должна вызываться только один раз для каждого экземпляра после установления соединения; ее не следует вызывать вообще, если хост и пользователь были указаны при создании экземпляра. Большинство команд FTP разрешены только после входа клиента. Параметр acct предоставляет «информацию об учёте»; мало систем её реализуют.
-
FTP.abort() -
Прервать процесс передачи файла. Иногда это не срабатывает, но попробовать стоит.
-
FTP.sendcmd(command) -
Отправить простую строку команды на сервер и вернуть строку ответа.
-
FTP.voidcmd(command) -
Отправка простой команды на сервер и обработка ответа. Возвращает ничего, если получен код ответа, соответствующий успеху (коды в диапазоне 200–299). Иначе генерирует исключение
error_reply.
-
FTP.retrbinary(command, callback[, maxblocksize[, rest]]) -
Получение файла в двоичном режиме передачи. command должна быть соответствующей командой
RETR:'RETR filename'. Функция callback вызывается для каждого блока полученных данных с одним строковым аргументом, содержащим блок данных. Необязательный аргумент maxblocksize задает максимальный размер блока для чтения на уровне сокетов, используемых для фактической передачи (который также будет максимальным размером блоков данных, передаваемых в callback). Выбирается разумное значение по умолчанию. rest означает то же, что и в методеtransfercmd().
-
FTP.retrlines(command[, callback]) -
Получение файла или списка каталогов в режиме ASCII-передачи. command должна быть соответствующей командой
RETR(см.retrbinary()) или командой, такой какLIST,NLSTилиMLSD(обычно просто строка'LIST').LISTизвлекает список файлов и информации о них.NLSTизвлекает список имён файлов. На некоторых серверахMLSDизвлекает читаемый машиной список файлов и информации о них. Функция callback вызывается для каждой строки со строковым аргументом, содержащим строку с удалёнными завершающими CRLF. По умолчанию callback печатает строку вsys.stdout.
-
FTP.set_pasv(val) -
Включить режим «пассивный» если val истинно, в противном случае отключить пассивный режим. (В Python 2.0 и ранее, пассивный режим был по умолчанию выключен; в Python 2.1 и позднее, он включен по умолчанию.)
-
FTP.storbinary(command, fp[, blocksize, callback, rest]) -
Сохранение файла в двоичном режиме передачи. command должно быть соответствующей
STORкомандой:"STOR filename". fp — это открытый объект файла, который читается до конца файла с помощью егоread()метода блоками размером blocksize, чтобы предоставить данные для хранения. Аргумент blocksize по умолчанию равен 8192. callback — это необязаемая вызываемая функция с одним параметром, которая вызывается для каждого блока данных после его отправки. rest означает то же самое, что и в методеtransfercmd().Изменено в версии 2.1: добавлено значение по умолчанию для blocksize.
Изменено в версии 2.6: добавлен параметр callback.
Изменено в версии 2.7: добавлен параметр rest.
-
FTP.storlines(command, fp[, callback]) -
Сохранение файла в текстовом режиме передачи. command должна быть соответствующей
STORкомандой (см.storbinary()). Строки читаются до конца файла из открытого объекта файла fp с помощью его методаreadline()для предоставления данных для хранения. callback — это необязаемая вызываемая функция с одним параметром, которая вызывается для каждой строки после ее отправки.Изменено в версии 2.6: добавлен параметр callback.
-
FTP.transfercmd(cmd[, rest]) -
Инициализация передачи по соединению с данными. Если передача активна, отправляется команда
EPRTилиPORTи команда передачи, указанная в cmd, и принимается подключение. Если сервер пассивный, отправляется командаEPSVилиPASV, устанавливается соединение с ним и запускается команда передачи. В любом случае возвращается сокет для подключения.Если задан необязательный rest, на сервер отправляется команда
REST, передавая rest в качестве аргумента. rest обычно представляет собой байтовый смещение в запрошенном файле, сообщая серверу о перезапуске отправки байтов файла с запрошенного смещения, пропуская начальные байты. Однако RFC 959 требует только, чтобы rest был строкой, содержащей символы в печатном диапазоне от ASCII-кода 33 до ASCII-кода 126. Методtransfercmd(), следовательно, преобразует rest в строку, но проверка содержимого строки не выполняется. Если сервер не распознает командуREST, возникнет исключениеerror_reply. Если это произойдет, просто вызовитеtransfercmd()без аргумента rest.
-
FTP.ntransfercmd(cmd[, rest]) -
Подобно
transfercmd(), но возвращает кортеж из соединения данных и ожидаемого размера данных. Если ожидаемый размер не может быть вычислен,Noneбудет возвращено в качестве ожидаемого размера. cmd и rest означают то же самое, что и вtransfercmd().
-
FTP.nlst(argument[, ...]) -
Возвращает список имён файлов, как возвращает команда
NLST. Необязательный аргумент — это каталог для отображения (по умолчанию — текущий каталог сервера). Несколько аргументов могут быть использованы для передачи нестандартных параметров к командеNLST.
-
FTP.dir(argument[, ...]) -
Создаёт список каталога, как возвращает команда
LIST, выводя его в стандартный вывод. Необязательный аргумент — это каталог для отображения (по умолчанию — текущий каталог сервера). Несколько аргументов могут быть использованы для передачи нестандартных параметров к командеLIST. Если последний аргумент — функция, она используется как функция обратного вызова, как дляretrlines(); по умолчанию выводится вsys.stdout. Этот метод возвращаетNone.
-
FTP.rename(fromname, toname) -
Переименовать файл fromname на сервере в toname.
-
FTP.delete(filename) -
Удалить файл с именем filename с сервера. При успехе возвращает текст ответа, в противном случае генерирует исключение
error_permпри ошибках разрешения илиerror_replyпри других ошибках.
-
FTP.cwd(pathname) -
Установить текущий каталог на сервере.
-
FTP.mkd(pathname) -
Создать новый каталог на сервере.
-
FTP.pwd() -
Возвращает путь к текущему каталогу на сервере.
-
FTP.rmd(dirname) -
Удалить каталог с именем dirname на сервере.
-
FTP.size(filename) -
Запрос размера файла с именем filename на сервере. При успехе возвращается размер файла в виде целого числа, в противном случае возвращается
None. Обратите внимание, что командаSIZEне стандартизована, но поддерживается многими распространёнными реализациями сервера.
-
FTP.quit() -
Отправить команду
QUITсерверу и закрыть соединение. Это «вежливый» способ закрытия соединения, но он может вызвать исключение, если сервер ответит ошибкой на командуQUIT. Это подразумевает вызов методаclose(), что делает экземплярFTPбесполезным для последующих вызовов (см. ниже).
-
FTP.close() -
Закрыть соединение односторонне. Это не должно применяться к уже закрытому соединению, например, после успешного вызова
quit(). После этого вызова экземплярFTPбольше не должен использоваться (после вызоваclose()илиquit()вы не можете повторно открыть соединение, вызвав методlogin()).
2. Объекты FTP_TLS
FTP_TLS класс наследуется от FTP, определяя эти дополнительные объекты:
-
FTP_TLS.ssl_version -
Версия SSL для использования (по умолчанию
ssl.PROTOCOL_SSLv23).
-
FTP_TLS.auth() -
Настройка защищенного управляющего соединения с использованием TLS или SSL в зависимости от указанного в атрибуте
ssl_version().
-
FTP_TLS.prot_p() -
Настройка безопасного соединения данных.
-
FTP_TLS.prot_c() -
Настройка соединения данных в текстовом формате.
© 2001–2020 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/2.7/library/ftplib.html