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.
Доступность: не Emscripten, не WASI.
Этот модуль не работает и не доступен на платформах WebAssembly wasm32-emscripten и wasm32-wasi. Более подробную информацию см. в Плаформах WebAssembly.
Вот пример сеанса с использованием модуля 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 разрешены только после входа в систему клиента. Параметр acct предоставляет «информацию об учетных записях»; мало систем реализуют это.
-
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 равно true, в противном случае отключить пассивный режим. По умолчанию режим пассивный включен.
-
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–2023 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.11/library/ftplib.html