ftplib
— Клиент протокола FTP¶
Исходный код: Lib/ftplib.py
Модуль определяет класс FTP
и несколько связанных элементов. Класс
FTP
реализует клиентскую сторону протокола FTP. Он используется
для написания Python программ, которые выполняют множество
автоматизированных FTP работ, таких как зеркалирование других FTP-серверов.
Он также используется модулем urllib.request
, чтобы обращаться по URL с
использованием FTP. Для получения дополнительной информации о FTP (протокол передачи
файлов) посмотрите в интернете RFC 959.
Вот пример сеанса с использованием модуля ftplib
:
>>> from ftplib import FTP
>>> ftp = FTP('ftp.debian.org') # подключиться к хосту, порт по умолчанию
>>> ftp.login() # пользователь anonymous, пароль anonymous@
'230 Login successful.'
>>> ftp.cwd('debian') # перейти в каталог "debian"
>>> ftp.retrlines('LIST') # список содержимого каталога
-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()
Модуль определяет следующие элементы:
-
class
ftplib.
FTP
(host='', user='', passwd='', acct='', timeout=None, source_address=None)¶ Возвращает новые сущность класса
FTP
. При задании параметра host выполняется вызов методаconnect(host)
. Когда user дан, дополнительно требование метода, которым сделанlogin(user, passwd, acct)
(где passwd и дефолт acct к пустому строка, когда он не дан). Опциональный параметр timeout задает тайм-аут в секундах для таких операций блокировки, как попытка подключения (если не указан, то глобальным параметром тайм-аута по умолчанию будет используемый). source_address является 2-кортежным(host, port)
для сокет, который должен быть привязан в качестве адреса источника перед подключением.Класс
FTP
поддерживаетwith
инструкцию, например:>>> from ftplib import FTP >>> with FTP("ftp1.at.proftpd.org") as ftp: ... ftp.login() ... ftp.dir() ... # doctest: +SKIP '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 добавлен параметр.
-
class
ftplib.
FTP_TLS
(host='', user='', passwd='', acct='', keyfile=None, certfile=None, context=None, timeout=None, source_address=None)¶ 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 системы сертификаты для вас.Вот пример сеанса с использованием класса
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
.
См.также
Модуль netrc
синтаксический анализатор для формата файла .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)
для сокет, который должен быть привязан в качестве адреса источника перед подключением.Raises an auditing event
ftplib.connect
with argumentsself
,host
,port
.Изменено в версии 3.3: source_address добавлен параметр.
-
FTP.
getwelcome
()¶ Возвращает приветственное сообщение, отправленное сервером в ответ на первоначальное подключение. (Это сообщение иногда содержит отказ от ответственности или справочную информацию, которая может иметь отношение к пользователю.
-
FTP.
login
(user='anonymous', passwd='', acct='')¶ Зарегистрируйтесь в качестве заданного user. passwd и параметры acct дополнительные и дефолт к пустому строка. Если user не указан, по умолчанию устанавливается значение
'anonymous'
. Если user -'anonymous'
, дефолт, passwd -'anonymous@'
. Эта функция должна вызываться только один раз для каждого сущность после установления соединения; он не должен вызываться вообще, если хост и пользователь были предоставлены при создании сущность. Большинство FTP-команд разрешено только после входа клиента в систему. Параметр acct предоставляет «бухгалтерскую информацию»; немногие системы реализуют это.
-
FTP.
abort
()¶ Прервать выполняемую передачу файла. Использование этого не всегда работает, но стоит попробовать.
-
FTP.
sendcmd
(cmd)¶ Отправка простой команды строка на сервер и ответ возвращает строка.
Raises an auditing event
ftplib.sendcmd
with argumentsself
,cmd
.
-
FTP.
voidcmd
(cmd)¶ Отправьте на сервер простую команду строка и обработайте ответ. Ничего не вернуть, если получен код ответа, соответствующий успеху (коды в диапазоне 200–299). Поднимите
error_reply
иначе.Raises an auditing event
ftplib.sendcmd
with argumentsself
,cmd
.
-
FTP.
retrbinary
(cmd, callback, blocksize=8192, rest=None)¶ Извлечение файла в режиме двоичной передачи. cmd должна быть соответствующей командой
RETR
:'RETR filename'
. Функция callback вызывается для каждого принятого блока данных, причем один аргумент байтов дает блок данных. Необязательный аргумент blocksize указывает максимальный размер чанк для чтения объекта низкоуровневое сокет, созданного для выполнения фактической передачи (который также будет наибольшим размером блоков данных, переданных в callback). Выбран приемлемый дефолт. rest означает то же, что и в методеtransfercmd()
.
-
FTP.
retrlines
(cmd, callback=None)¶ Извлеч список файлов или каталогов в режиме передачи ASCII. 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)¶ Сохранение файла в режиме передачи ASCII. cmd должна быть соответствующей командой
STOR
(см.storbinary()
). Строки считываются до EOF из файлового объекта fp (открытого в двоичном режиме) с помощью его методаreadline()
для предоставления данных, которые должны быть сохранены. callback является необязательным одиночным параметром, вызываемым в каждой строке после отправки.
-
FTP.
transfercmd
(cmd, rest=None)¶ Инициируйте передачу по соединению для передачи данных. Если передача активна, отправьте команду
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=None)¶ Как и
transfercmd()
, но возвращает кортеж соединения данных и ожидаемый размер данных. Если не удалось вычислить ожидаемый размер,None
будет возвращенныйas ожидаемый размер. cmd и rest означает то же, что и вtransfercmd()
.
-
FTP.
mlsd
(path="", facts=[])¶ Перечислите каталог в стандартизированном формате с помощью команды
MLSD
(RFC 3659). Если path опущен, предполагается текущий каталог. facts - список строки, представляющих требуемый тип информации (например,["type", "size", "perm"]
). Возвращает генератор объект, дающий кортеж из двух элементов для каждого файла, найденного в пути. Первый элемент - имя файла, второй - словарь, содержащий факты об имени файла. Содержимое этого словаря может быть ограничено аргументом facts, но сервер не гарантирован, чтобы возвращает все запрошенные факты.Добавлено в версии 3.3.
-
FTP.
nlst
(argument[, ...])¶ Возвращает список имен файлов как возвращенныйby команды
NLST
. Дополнительный argument - справочник, чтобы перечислить (дефолт - текущий справочник сервера). Несколько аргументов могут быть используемый, чтобы передать нестандартные варианты к командеNLST
.Примечание
Если сервер поддерживает команду,
mlsd()
предлагает лучший API.
-
FTP.
dir
(argument[, ...])¶ Создайте каталог в виде команды возвращенныйby
LIST
, распечатав его для стандартного вывода. Дополнительный argument - справочник, чтобы перечислить (дефолт - текущий справочник сервера). Несколько аргументов могут быть используемый, чтобы передать нестандартные варианты к командеLIST
. Если последний аргумент - функция, это - используемый, поскольку callback функционирует что касается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 на сервере. При успехе размер файла возвращенныйas равен целому числу, в противном случае возвращается
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
и Указание имени сервера (см.ssl.HAS_SNI
).
-
FTP_TLS.
ccc
()¶ Вернуть канал управления в открытый текст. Это может быть полезно для использования преимуществ брандмауэров, которые знают, как обрабатывать NAT с незащищенным FTP без открытия фиксированных портов.
Добавлено в версии 3.3.
-
FTP_TLS.
prot_p
()¶ Настройка безопасного подключения к данным.
-
FTP_TLS.
prot_c
()¶ Настройка подключения к открытым текстовым данным.