ftplib — Клиент протокола FTP
Исходный код: Lib/ftplib.py
В этом модуле определён класс FTP и несколько связанных элементов. Класс FTP реализует клиентскую сторону протокола FTP. Его можно использовать для написания программ Python, которые выполняют различные автоматизированные задачи FTP, такие как зеркалирование других серверов FTP. Он также используется модулем urllib.request для обработки URL-адресов, использующих FTP. Более подробную информацию о протоколе FTP (File Transfer Protocol) см. в документе интернет-стандарта RFC 959.
По умолчанию используется кодировка UTF-8, в соответствии с RFC 2640.
Вот пример сеанса с использованием модуля ftplib:
>>> from ftplib import FTP
>>> ftp = FTP('ftp.us.debian.org') # connect to host, default port
>>> ftp.login() # user anonymous, passwd anonymous@
'230 Login successful.'
>>> ftp.cwd('debian') # change into "debian" directory
'250 Directory successfully changed.'
>>> 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.'
>>> with open('README', 'wb') as fp:
>>> ftp.retrbinary('RETR README', fp.write)
'226 Transfer complete.'
>>> ftp.quit()
'221 Goodbye.'
Модуль определяет следующие элементы:
-
class ftplib.FTP(host='', user='', passwd='', acct='', timeout=None, source_address=None, *, encoding='utf-8') -
Возвращает новый экземпляр класса
FTP. При указании параметра host, вызывается методconnect(host). При указании user, дополнительно вызывается методlogin(user, passwd, acct), (где passwd и acct по умолчанию пустые строки, если не указаны). Необязательный параметр timeout указывает таймаут в секундах для блокирующих операций, таких как попытка подключения (если не указан, используется глобальный таймаут по умолчанию). Параметр source_address — это кортеж из двух элементов(host, port), определяющий адрес сокета, к которому он должен быть привязан перед подключением. Параметр encoding определяет кодировку для каталогов и имён файлов.Класс
FTPподдерживает операторwith, например:>>> from ftplib import FTP >>> with FTP("ftp1.at.proftpd.org") as ftp: ... ftp.login() ... ftp.dir() ... '230 Anonymous login ok, restrictions apply.' dr-xr-xr-x 9 ftp ftp 154 May 6 10:43 . dr-xr-xr-x 9 ftp ftp 154 May 6 10:43 .. dr-xr-xr-x 5 ftp ftp 4096 May 6 10:43 CentOS dr-xr-xr-x 3 ftp ftp 18 Jul 10 2008 Fedora >>>Изменено в версии 3.2: Добавлена поддержка оператора
with.Изменено в версии 3.3: Добавлен параметр source_address.
Изменено в версии 3.9: Если параметр timeout установлен в ноль, будет поднято исключение
ValueErrorдля предотвращения создания неблокирующего сокета. Добавлено параметр encoding, по умолчанию изменено с Latin-1 на UTF-8 для соответствия RFC 2640.
-
class ftplib.FTP_TLS(host='', user='', passwd='', acct='', keyfile=None, certfile=None, context=None, timeout=None, source_address=None, *, encoding='utf-8') -
Подкласс
FTP, который добавляет поддержку TLS к FTP, как описано в RFC 4217. Подключение к порту 21 неявно защищает соединение управления FTP перед аутентификацией. Для защиты соединения данных пользователю необходимо явно запросить это, вызвав методprot_p(). Параметр context — объектssl.SSLContext, который позволяет объединять параметры конфигурации SSL, сертификаты и закрытые ключи в единую (возможно, долгоживущую) структуру. Обратитесь к Рекомендации по безопасности для получения наилучших практик.Параметры keyfile и certfile — это устаревшая альтернатива параметру context; они могут указывать на файлы закрытого ключа и цепочки сертификатов (соответственно) в формате PEM для SSL-соединения.
Новое в версии 3.2.
Изменено в версии 3.3: Добавлен параметр source_address.
Изменено в версии 3.4: Класс теперь поддерживает проверку имени хоста с помощью
ssl.SSLContext.check_hostnameи указание имени сервера (Server Name Indication, см.ssl.HAS_SNI).Устарело начиная с версии 3.6: Параметры keyfile и certfile устарели в пользу context. Используйте
ssl.SSLContext.load_cert_chain()вместо них или позвольтеssl.create_default_context()выбрать доверенные сертификаты CA вашей системы.Изменено в версии 3.9: Если параметр timeout установлен в ноль, будет поднято исключение
ValueErrorдля предотвращения создания неблокирующего сокета. Добавлено параметр encoding, по умолчанию изменено с Latin-1 на UTF-8 для соответствия RFC 2640.Вот пример сеанса с использованием класса
FTP_TLS:>>> ftps = FTP_TLS('ftp.pureftpd.org') >>> ftps.login() '230 Anonymous user logged in' >>> ftps.prot_p() '200 Data protection level set to "private"' >>> ftps.nlst() ['6jack', 'OpenBSD', 'antilink', 'blogbench', 'bsdcam', 'clockspeed', 'djbdns-jedi', 'docs', 'eaccelerator-jedi', 'favicon.ico', 'francotone', 'fugu', 'ignore', 'libpuzzle', 'metalog', 'minidentd', 'misc', 'mysql-udf-global-user-variables', 'php-jenkins-hash', 'php-skein-hash', 'php-webdav', 'phpaudit', 'phpbench', 'pincaster', 'ping', 'posto', 'pub', 'public', 'public_keys', 'pure-ftpd', 'qscan', 'qtc', 'sharedance', 'skycache', 'sound', 'tmp', 'ucarp']
-
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-соединением (в отличие от ошибок программирования, допущенных вызывающей стороной). Это множество включает четыре перечисленных выше исключения, а такжеOSErrorиEOFError.
См. также
-
Modulenetrc -
Парсер для формата файла
.netrc. Файл.netrcобычно используется клиентами FTP для загрузки информации об аутентификации пользователя перед запросом.
Объекты FTP
Несколько методов доступны в двух вариантах: один для обработки текстовых файлов, а другой — для двоичных файлов. Они названы по команде, которая используется, за которой следует lines для текстовой версии или binary для двоичной версии.
FTP экземпляры имеют следующие методы:
-
FTP.set_debuglevel(level) -
Установите уровень отладки экземпляра. Это контролирует количество выводимой информации отладки. По умолчанию,
0, не генерируется вывод отладки. Значение1генерирует умеренное количество вывода отладки, обычно по одной строке на запрос. Значение2или выше генерирует максимальное количество вывода отладки, регистрируя каждую строку, отправленную и полученную по управляющему соединению.
-
FTP.connect(host='', port=0, timeout=None, source_address=None) -
Подключиться к указанному хосту и порту. Номер порта по умолчанию
21, как указано в спецификации протокола FTP. Редко требуется указать другой номер порта. Эта функция должна вызываться только один раз для каждого экземпляра; она не должна вызываться вообще, если хост был задан при создании экземпляра. Все остальные методы могут быть использованы только после установления соединения. Необязательный параметр timeout задаёт таймаут в секундах для попытки соединения. Если timeout не передан, используется глобальное значение таймаута по умолчанию. source_address — это кортеж из 2 элементов(host, port)для сокета, к которому нужно подключиться в качестве адреса источника перед подключением.Вызывает событие аудита аудита
ftplib.connectс аргументамиself,host,port.Изменено в версии 3.3: Добавлен параметр source_address.
-
FTP.getwelcome() -
Возвращает сообщение приветствия, отправленное сервером в ответ на первоначальное подключение. (Это сообщение иногда содержит отметки или справочную информацию, которые могут быть полезны пользователю.)
-
FTP.login(user='anonymous', passwd='', acct='') -
Войти как указанный пользователь. Параметры passwd и acct являются необязательными и по умолчанию устанавливаются в пустую строку. Если пользователь не указан, он по умолчанию
'anonymous'. Если пользователь'anonymous', значение passwd по умолчанию'anonymous@'. Эта функция должна вызываться только один раз для каждого экземпляра после установления соединения; она не должна вызываться вообще, если хост и пользователь были заданы при создании экземпляра. Большинство команд FTP разрешены только после входа клиента.
-
FTP.abort() -
Прервать процесс передачи файла. Использование этого не всегда работает, но стоит попробовать.
-
FTP.sendcmd(cmd) -
Отправить простую строку команды на сервер и вернуть строку ответа.
Вызывает событие аудита аудита
ftplib.sendcmdс аргументамиself,cmd.
-
FTP.voidcmd(cmd) -
Отправить простую строку команды на сервер и обработать ответ. Ничего не возвращает, если получен код ответа, соответствующий успеху (коды в диапазоне 200–299). В противном случае вызывает
error_reply.Вызывает событие аудита аудита
ftplib.sendcmdс аргументамиself,cmd.
-
FTP.retrbinary(cmd, callback, blocksize=8192, rest=None) -
Получить файл в двоичном режиме передачи. cmd должна быть соответствующей
RETRкомандой:'RETR filename'. Функция callback вызывается для каждого блока полученных данных с одним аргументом bytes, содержащим блок данных. Необязательный аргумент blocksize задаёт максимальный размер блока для чтения в сокете низкого уровня, созданном для фактической передачи (который также будет максимальным размером блоков данных, передаваемых в callback). Выбирается разумное значение по умолчанию. rest имеет то же значение, что и в методеtransfercmd().
-
FTP.retrlines(cmd, callback=None) -
Получить список файлов или директорий в кодировке, указанной в параметре encoding при инициализации. cmd должна быть соответствующей
RETRкомандой (см.retrbinary()) или командой, такой какLISTилиNLST(обычно просто строка'LIST').LISTизвлекает список файлов и информацию о них.NLSTизвлекает список имён файлов. Функция callback вызывается для каждой строки с аргументом строкой, содержащей строку с удалённым завершающим CRLF. По умолчанию callback выводит строку вsys.stdout.
-
FTP.set_pasv(val) -
Включить «пассивный» режим, если val истинно, иначе отключить пассивный режим. Пассивный режим включен по умолчанию.
-
FTP.storbinary(cmd, fp, blocksize=8192, callback=None, rest=None) -
Сохранить файл в двоичном режиме передачи. cmd должна быть соответствующей
STORкомандой:"STOR filename". fp — это объект файла (открыт в двоичном режиме), который читается до EOF, используя методread()блоками размером blocksize для предоставления данных для хранения. Аргумент blocksize по умолчанию равен 8192. callback — это необязательная вызываемая функция с одним параметром, которая вызывается для каждого блока данных после его отправки. rest имеет то же значение, что и в методеtransfercmd().Изменено в версии 3.2: Добавлен параметр rest.
-
FTP.storlines(cmd, fp, callback=None) -
Сохранить файл в режиме строк. cmd должна быть соответствующей
STORкомандой (см.storbinary()). Строки читаются до EOF из объекта файла fp (открыт в двоичном режиме), используя методreadline()для предоставления данных для хранения. callback — это необязательная вызываемая функция с одним параметром, которая вызывается для каждой строки после её отправки.
-
FTP.transfercmd(cmd, rest=None) -
Инициализировать передачу по соединению данных. Если передача активна, отправляется команда
EPRTилиPORTи команда передачи, указанная в cmd, и принимается подключение. Если сервер пассивный, отправляется командаEPSVилиPASV, устанавливается соединение и запускается команда передачи. В любом случае возвращается сокет для подключения.Если задан необязательный rest, отправляется команда
RESTна сервер, передавая rest в качестве аргумента. rest обычно представляет собой смещение в байтах в запрашиваемом файле, говорящее серверу о возобновлении отправки байтов файла с указанного смещения, пропуская начальные байты. Обратите внимание, что методtransfercmd()преобразует rest в строку с помощью параметра encoding, указанного при инициализации, но проверка содержимого строки не выполняется. Если сервер не распознаёт командуREST, будет возбуждено исключениеerror_reply. Если это произойдёт, просто вызовитеtransfercmd()без аргумента rest.
-
FTP.ntransfercmd(cmd, rest=None) -
Как
transfercmd(), но возвращает кортеж из соединения данных и ожидаемого размера данных. Если ожидаемый размер не может быть вычислен,Noneбудет возвращён как ожидаемый размер. cmd и rest имеют то же значение, что и вtransfercmd().
-
FTP.mlsd(path="", facts=[]) -
Выводит список директории в стандартном формате, используя команду
MLSD(RFC 3659). Если path опущено, предполагается текущая директория. facts — это список строк, представляющих тип желаемой информации (например,["type", "size", "perm"]). Возвращает генератор, выдающий кортеж из двух элементов для каждого найденного файла в пути. Первый элемент — имя файла, второй — словарь, содержащий факты об имени файла. Содержимое этого словаря может быть ограничено аргументом facts, но сервер не гарантирует возвращения всех запрошенных фактов.Новое в версии 3.3.
-
FTP.nlst(argument[, ...]) -
Возвращает список имён файлов, полученный в результате выполнения команды
NLST. Необязательный аргумент — это каталог для вывода списка (по умолчанию — текущий каталог сервера). Несколько аргументов могут быть использованы для передачи нестандартных опций командеNLST.Примечание
Если ваш сервер поддерживает эту команду,
mlsd()предоставляет более удобный API.
-
FTP.dir(argument[, ...]) -
Выводит список каталога, возвращаемый командой
LIST, в стандартный вывод. Необязательный аргумент — это каталог для вывода списка (по умолчанию — текущий каталог сервера). Несколько аргументов могут быть использованы для передачи нестандартных опций командеLIST. Если последний аргумент является функцией, она используется в качестве обработчика, как дляretrlines(); по умолчанию вывод осуществляется вsys.stdout. Данный метод возвращаетNone.Примечание
Если ваш сервер поддерживает эту команду,
mlsd()предоставляет более удобный API.
-
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()).
FTP_TLS Объекты
FTP_TLS класс наследуется от FTP, определяя эти дополнительные объекты:
-
FTP_TLS.ssl_version -
Версия SSL для использования (по умолчанию
ssl.PROTOCOL_SSLv23).
-
FTP_TLS.auth() -
Устанавливает защищённое управляющее соединение с помощью TLS или SSL, в зависимости от указанного в атрибуте
ssl_version.Изменено в версии 3.4: Метод теперь поддерживает проверку имени хоста с помощью
ssl.SSLContext.check_hostnameи Server Name Indication (см.ssl.HAS_SNI).
-
FTP_TLS.ccc() -
Возвращает управляющий канал обратно в текстовый режим. Это может быть полезно для работы с брандмауэрами, которые знают, как обрабатывать NAT с не защищённым FTP без открытия фиксированных портов.
Добавлен в версии 3.3.
-
FTP_TLS.prot_p() -
Устанавливает защищённое соединение для передачи данных.
-
FTP_TLS.prot_c() -
Устанавливает открытое соединение для передачи данных.
© 2001–2022 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.9/library/ftplib.html