### 导航

- [索引](../genindex.xhtml "总目录")

- [模块](../py-modindex.xhtml "Python 模块索引") |

- [下一页](poplib.xhtml "poplib --- POP3 protocol client") |

- [上一页](http.client.xhtml "http.client --- HTTP协议客户端") |

- ![](https://box.kancloud.cn/a721fc7ec672275e257bbbfde49a4d4e_16x16.png)

- [Python](https://www.python.org/) »

- zh\_CN 3.7.3 [文档](../index.xhtml) »

- [Python 标准库](index.xhtml) »

- [互联网协议和支持](internet.xhtml) »

- $('.inline-search').show(0); |

# [`ftplib`](#module-ftplib "ftplib: FTP protocol client (requires sockets).") --- FTP protocol client

**Source code:** [Lib/ftplib.py](https://github.com/python/cpython/tree/3.7/Lib/ftplib.py) \[https://github.com/python/cpython/tree/3.7/Lib/ftplib.py\]

- - - - - -

This module defines the class [`FTP`](#ftplib.FTP "ftplib.FTP") and a few related items. The [`FTP`](#ftplib.FTP "ftplib.FTP") class implements the client side of the FTP protocol. You can use this to write Python programs that perform a variety of automated FTP jobs, such as mirroring other FTP servers. It is also used by the module [`urllib.request`](urllib.request.xhtml#module-urllib.request "urllib.request: Extensible library for opening URLs.") to handle URLs that use FTP. For more information on FTP (File Transfer Protocol), see Internet [**RFC 959**](https://tools.ietf.org/html/rfc959.html) \[https://tools.ietf.org/html/rfc959.html\].

Here's a sample session using the [`ftplib`](#module-ftplib "ftplib: FTP protocol client (requires sockets).") module:

```

>>> 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=None*, *source\_address=None*)Return a new instance of the [`FTP`](#ftplib.FTP "ftplib.FTP") class. When *host* is given, the method call `connect(host)` is made. When *user* is given, additionally the method call `login(user, passwd, acct)` is made (where *passwd* and *acct* default to the empty string when not given). The optional *timeout*parameter specifies a timeout in seconds for blocking operations like the connection attempt (if is not specified, the global default timeout setting will be used). *source\_address* is a 2-tuple `(host, port)` for the socket to bind to as its source address before connecting.

The [`FTP`](#ftplib.FTP "ftplib.FTP") class supports the [`with`](../reference/compound_stmts.xhtml#with) statement, e.g.:

```

>>> 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`](../reference/compound_stmts.xhtml#with) 语句。

在 3.3 版更改: *source\_address* parameter was added.

*class* `ftplib.``FTP_TLS`(*host=''*, *user=''*, *passwd=''*, *acct=''*, *keyfile=None*, *certfile=None*, *context=None*, *timeout=None*, *source\_address=None*)A [`FTP`](#ftplib.FTP "ftplib.FTP") subclass which adds TLS support to FTP as described in [**RFC 4217**](https://tools.ietf.org/html/rfc4217.html) \[https://tools.ietf.org/html/rfc4217.html\]. Connect as usual to port 21 implicitly securing the FTP control connection before authenticating. Securing the data connection requires the user to explicitly ask for it by calling the [`prot_p()`](#ftplib.FTP_TLS.prot_p "ftplib.FTP_TLS.prot_p") method. *context*is a [`ssl.SSLContext`](ssl.xhtml#ssl.SSLContext "ssl.SSLContext") object which allows bundling SSL configuration options, certificates and private keys into a single (potentially long-lived) structure. Please read [Security considerations](ssl.xhtml#ssl-security) for best practices.

*keyfile* and *certfile* are a legacy alternative to *context* -- they can point to PEM-formatted private key and certificate chain files (respectively) for the SSL connection.

3\.2 新版功能.

在 3.3 版更改: *source\_address* parameter was added.

在 3.4 版更改: The class now supports hostname check with [`ssl.SSLContext.check_hostname`](ssl.xhtml#ssl.SSLContext.check_hostname "ssl.SSLContext.check_hostname") and *Server Name Indication* (see [`ssl.HAS_SNI`](ssl.xhtml#ssl.HAS_SNI "ssl.HAS_SNI")).

3\.6 版后已移除: *keyfile* and *certfile* are deprecated in favor of *context*. Please use [`ssl.SSLContext.load_cert_chain()`](ssl.xhtml#ssl.SSLContext.load_cert_chain "ssl.SSLContext.load_cert_chain") instead, or let [`ssl.create_default_context()`](ssl.xhtml#ssl.create_default_context "ssl.create_default_context") select the system's trusted CA certificates for you.

Here's a sample session using the [`FTP_TLS`](#ftplib.FTP_TLS "ftplib.FTP_TLS") class:

```

>>> 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 raised when an unexpected reply is received from the server.

*exception* `ftplib.``error_temp`Exception raised when an error code signifying a temporary error (response codes in the range 400--499) is received.

*exception* `ftplib.``error_perm`Exception raised when an error code signifying a permanent error (response codes in the range 500--599) is received.

*exception* `ftplib.``error_proto`Exception raised when a reply is received from the server that does not fit the response specifications of the File Transfer Protocol, i.e. begin with a digit in the range 1--5.

`ftplib.``all_errors`The set of all exceptions (as a tuple) that methods of [`FTP`](#ftplib.FTP "ftplib.FTP")instances may raise as a result of problems with the FTP connection (as opposed to programming errors made by the caller). This set includes the four exceptions listed above as well as [`OSError`](exceptions.xhtml#OSError "OSError").

参见

Module [`netrc`](netrc.xhtml#module-netrc "netrc: Loading of .netrc files.")Parser for the `.netrc` file format. The file `.netrc` is typically used by FTP clients to load user authentication information before prompting the user.

## FTP Objects

Several methods are available in two flavors: one for handling text files and another for binary files. These are named for the command which is used followed by `lines` for the text version or `binary` for the binary version.

[`FTP`](#ftplib.FTP "ftplib.FTP") instances have the following methods:

`FTP.``set_debuglevel`(*level*)Set the instance's debugging level. This controls the amount of debugging output printed. The default, `0`, produces no debugging output. A value of `1` produces a moderate amount of debugging output, generally a single line per request. A value of `2` or higher produces the maximum amount of debugging output, logging each line sent and received on the control connection.

`FTP.``connect`(*host=''*, *port=0*, *timeout=None*, *source\_address=None*)Connect to the given host and port. The default port number is `21`, as specified by the FTP protocol specification. It is rarely needed to specify a different port number. This function should be called only once for each instance; it should not be called at all if a host was given when the instance was created. All other methods can only be used after a connection has been made. The optional *timeout* parameter specifies a timeout in seconds for the connection attempt. If no *timeout* is passed, the global default timeout setting will be used. *source\_address* is a 2-tuple `(host, port)` for the socket to bind to as its source address before connecting.

在 3.3 版更改: *source\_address* parameter was added.

`FTP.``getwelcome`()Return the welcome message sent by the server in reply to the initial connection. (This message sometimes contains disclaimers or help information that may be relevant to the user.)

`FTP.``login`(*user='anonymous'*, *passwd=''*, *acct=''*)Log in as the given *user*. The *passwd* and *acct* parameters are optional and default to the empty string. If no *user* is specified, it defaults to `'anonymous'`. If *user* is `'anonymous'`, the default *passwd* is `'anonymous@'`. This function should be called only once for each instance, after a connection has been established; it should not be called at all if a host and user were given when the instance was created. Most FTP commands are only allowed after the client has logged in. The *acct* parameter supplies "accounting information"; few systems implement this.

`FTP.``abort`()Abort a file transfer that is in progress. Using this does not always work, but it's worth a try.

`FTP.``sendcmd`(*cmd*)Send a simple command string to the server and return the response string.

`FTP.``voidcmd`(*cmd*)Send a simple command string to the server and handle the response. Return nothing if a response code corresponding to success (codes in the range 200--299) is received. Raise [`error_reply`](#ftplib.error_reply "ftplib.error_reply") otherwise.

`FTP.``retrbinary`(*cmd*, *callback*, *blocksize=8192*, *rest=None*)Retrieve a file in binary transfer mode. *cmd* should be an appropriate `RETR` command: `'RETR filename'`. The *callback* function is called for each block of data received, with a single bytes argument giving the data block. The optional *blocksize* argument specifies the maximum chunk size to read on the low-level socket object created to do the actual transfer (which will also be the largest size of the data blocks passed to *callback*). A reasonable default is chosen. *rest* means the same thing as in the [`transfercmd()`](#ftplib.FTP.transfercmd "ftplib.FTP.transfercmd") method.

`FTP.``retrlines`(*cmd*, *callback=None*)Retrieve a file or directory listing in ASCII transfer mode. *cmd* should be an appropriate `RETR` command (see [`retrbinary()`](#ftplib.FTP.retrbinary "ftplib.FTP.retrbinary")) or a command such as `LIST` or `NLST` (usually just the string `'LIST'`). `LIST` retrieves a list of files and information about those files. `NLST` retrieves a list of file names. The *callback* function is called for each line with a string argument containing the line with the trailing CRLF stripped. The default *callback*prints the line to `sys.stdout`.

`FTP.``set_pasv`(*val*)Enable "passive" mode if *val* is true, otherwise disable passive mode. Passive mode is on by default.

`FTP.``storbinary`(*cmd*, *fp*, *blocksize=8192*, *callback=None*, *rest=None*)Store a file in binary transfer mode. *cmd* should be an appropriate `STOR` command: `"STOR filename"`. *fp* is a [file object](../glossary.xhtml#term-file-object)(opened in binary mode) which is read until EOF using its `read()`method in blocks of size *blocksize* to provide the data to be stored. The *blocksize* argument defaults to 8192. *callback* is an optional single parameter callable that is called on each block of data after it is sent. *rest* means the same thing as in the [`transfercmd()`](#ftplib.FTP.transfercmd "ftplib.FTP.transfercmd") method.

在 3.2 版更改: *rest* parameter added.

`FTP.``storlines`(*cmd*, *fp*, *callback=None*)Store a file in ASCII transfer mode. *cmd* should be an appropriate `STOR` command (see [`storbinary()`](#ftplib.FTP.storbinary "ftplib.FTP.storbinary")). Lines are read until EOF from the [file object](../glossary.xhtml#term-file-object) *fp* (opened in binary mode) using its [`readline()`](io.xhtml#io.IOBase.readline "io.IOBase.readline")method to provide the data to be stored. *callback* is an optional single parameter callable that is called on each line after it is sent.

`FTP.``transfercmd`(*cmd*, *rest=None*)Initiate a transfer over the data connection. If the transfer is active, send an `EPRT` or `PORT` command and the transfer command specified by *cmd*, and accept the connection. If the server is passive, send an `EPSV` or `PASV`command, connect to it, and start the transfer command. Either way, return the socket for the connection.

If optional *rest* is given, a `REST` command is sent to the server, passing *rest* as an argument. *rest* is usually a byte offset into the requested file, telling the server to restart sending the file's bytes at the requested offset, skipping over the initial bytes. Note however that [**RFC 959**](https://tools.ietf.org/html/rfc959.html) \[https://tools.ietf.org/html/rfc959.html\] requires only that *rest* be a string containing characters in the printable range from ASCII code 33 to ASCII code 126. The [`transfercmd()`](#ftplib.FTP.transfercmd "ftplib.FTP.transfercmd") method, therefore, converts *rest* to a string, but no check is performed on the string's contents. If the server does not recognize the `REST` command, an [`error_reply`](#ftplib.error_reply "ftplib.error_reply") exception will be raised. If this happens, simply call [`transfercmd()`](#ftplib.FTP.transfercmd "ftplib.FTP.transfercmd") without a *rest* argument.

`FTP.``ntransfercmd`(*cmd*, *rest=None*)Like [`transfercmd()`](#ftplib.FTP.transfercmd "ftplib.FTP.transfercmd"), but returns a tuple of the data connection and the expected size of the data. If the expected size could not be computed, `None`will be returned as the expected size. *cmd* and *rest* means the same thing as in [`transfercmd()`](#ftplib.FTP.transfercmd "ftplib.FTP.transfercmd").

`FTP.``mlsd`(*path=""*, *facts=\[\]*)List a directory in a standardized format by using `MLSD` command ([**RFC 3659**](https://tools.ietf.org/html/rfc3659.html) \[https://tools.ietf.org/html/rfc3659.html\]). If *path* is omitted the current directory is assumed. *facts* is a list of strings representing the type of information desired (e.g. `["type", "size", "perm"]`). Return a generator object yielding a tuple of two elements for every file found in path. First element is the file name, the second one is a dictionary containing facts about the file name. Content of this dictionary might be limited by the *facts* argument but server is not guaranteed to return all requested facts.

3\.3 新版功能.

`FTP.``nlst`(*argument*\[, *...*\])Return a list of file names as returned by the `NLST` command. The optional *argument* is a directory to list (default is the current server directory). Multiple arguments can be used to pass non-standard options to the `NLST` command.

注解

If your server supports the command, [`mlsd()`](#ftplib.FTP.mlsd "ftplib.FTP.mlsd") offers a better API.

`FTP.``dir`(*argument*\[, *...*\])Produce a directory listing as returned by the `LIST` command, printing it to standard output. The optional *argument* is a directory to list (default is the current server directory). Multiple arguments can be used to pass non-standard options to the `LIST` command. If the last argument is a function, it is used as a *callback* function as for [`retrlines()`](#ftplib.FTP.retrlines "ftplib.FTP.retrlines"); the default prints to `sys.stdout`. This method returns `None`.

注解

If your server supports the command, [`mlsd()`](#ftplib.FTP.mlsd "ftplib.FTP.mlsd") offers a better API.

`FTP.``rename`(*fromname*, *toname*)Rename file *fromname* on the server to *toname*.

`FTP.``delete`(*filename*)Remove the file named *filename* from the server. If successful, returns the text of the response, otherwise raises [`error_perm`](#ftplib.error_perm "ftplib.error_perm") on permission errors or [`error_reply`](#ftplib.error_reply "ftplib.error_reply") on other errors.

`FTP.``cwd`(*pathname*)Set the current directory on the server.

`FTP.``mkd`(*pathname*)Create a new directory on the server.

`FTP.``pwd`()Return the pathname of the current directory on the server.

`FTP.``rmd`(*dirname*)Remove the directory named *dirname* on the server.

`FTP.``size`(*filename*)Request the size of the file named *filename* on the server. On success, the size of the file is returned as an integer, otherwise `None` is returned. Note that the `SIZE` command is not standardized, but is supported by many common server implementations.

`FTP.``quit`()Send a `QUIT` command to the server and close the connection. This is the "polite" way to close a connection, but it may raise an exception if the server responds with an error to the `QUIT` command. This implies a call to the [`close()`](#ftplib.FTP.close "ftplib.FTP.close") method which renders the [`FTP`](#ftplib.FTP "ftplib.FTP") instance useless for subsequent calls (see below).

`FTP.``close`()Close the connection unilaterally. This should not be applied to an already closed connection such as after a successful call to [`quit()`](#ftplib.FTP.quit "ftplib.FTP.quit"). After this call the [`FTP`](#ftplib.FTP "ftplib.FTP") instance should not be used any more (after a call to [`close()`](#ftplib.FTP.close "ftplib.FTP.close") or [`quit()`](#ftplib.FTP.quit "ftplib.FTP.quit") you cannot reopen the connection by issuing another [`login()`](#ftplib.FTP.login "ftplib.FTP.login") method).

## FTP\_TLS Objects

[`FTP_TLS`](#ftplib.FTP_TLS "ftplib.FTP_TLS") class inherits from [`FTP`](#ftplib.FTP "ftplib.FTP"), defining these additional objects:

`FTP_TLS.``ssl_version`The SSL version to use (defaults to [`ssl.PROTOCOL_SSLv23`](ssl.xhtml#ssl.PROTOCOL_SSLv23 "ssl.PROTOCOL_SSLv23")).

`FTP_TLS.``auth`()Set up a secure control connection by using TLS or SSL, depending on what is specified in the [`ssl_version`](#ftplib.FTP_TLS.ssl_version "ftplib.FTP_TLS.ssl_version") attribute.

在 3.4 版更改: The method now supports hostname check with [`ssl.SSLContext.check_hostname`](ssl.xhtml#ssl.SSLContext.check_hostname "ssl.SSLContext.check_hostname") and *Server Name Indication* (see [`ssl.HAS_SNI`](ssl.xhtml#ssl.HAS_SNI "ssl.HAS_SNI")).

`FTP_TLS.``ccc`()Revert control channel back to plaintext. This can be useful to take advantage of firewalls that know how to handle NAT with non-secure FTP without opening fixed ports.

3\.3 新版功能.

`FTP_TLS.``prot_p`()Set up secure data connection.

`FTP_TLS.``prot_c`()Set up clear text data connection.

### 导航

- [索引](../genindex.xhtml "总目录")

- [模块](../py-modindex.xhtml "Python 模块索引") |

- [下一页](poplib.xhtml "poplib --- POP3 protocol client") |

- [上一页](http.client.xhtml "http.client --- HTTP协议客户端") |

- ![](https://box.kancloud.cn/a721fc7ec672275e257bbbfde49a4d4e_16x16.png)

- [Python](https://www.python.org/) »

- zh\_CN 3.7.3 [文档](../index.xhtml) »

- [Python 标准库](index.xhtml) »

- [互联网协议和支持](internet.xhtml) »

- $('.inline-search').show(0); |

© [版权所有](../copyright.xhtml) 2001-2019, Python Software Foundation.

Python 软件基金会是一个非盈利组织。 [请捐助。](https://www.python.org/psf/donations/)

最后更新于 5月 21, 2019. [发现了问题](../bugs.xhtml)?

使用[Sphinx](http://sphinx.pocoo.org/)1.8.4 创建。

python3 ftplib_ftplib — FTP protocol client相关推荐

  1. Python3 websocket server与client

    pip install websocket-client 此文主要用python3 client端 这个上传图片在linux下不行,传图片要用flask_server server: #!/usr/b ...

  2. Python3 统计 ftp 文件个数和大小

    [背景] 本程序遍历 ftp 目录,列出单个文件大小,统计目录个数.文件个数.文件总大小.目的是在批量下载 FTP 文件时,不严格的验证下载结果的正确性. [环境] Windows10 下 Pytho ...

  3. Python3 内置http.client,urllib.request及三方库requests发送请求对比

    一.HTTP,GET请求,无参 GET http://httpbin.org/get Python3 http.client import http.client # 1. 建立HTTP连接 conn ...

  4. FTP服务器和客户端源代码编写问题(ftp server client source)

    最近关注FTP程序源代码的朋友非常多,这里简单说明一下. 其实FTP也就是普通的Socket程序,只是需要按照FTP协议(RFC959, 1635?可能我记错了)去做,也就是每个消息有固定的结构的,比 ...

  5. FTP的主动传输模式(PORT Mode)及被动传输模式(Passive Mode)(PASV)(FTP客户端 client 服务端 server 通信原理)

    ftp> ? passive passive enter passive transfer mode 文章目录 FTP的特殊性 主动传输模式和被动传输模式 FTP的特殊性 大多数的TCP服务是使 ...

  6. Python著名的lib和开发框架(均为转载)

    第一,https://github.com/vinta/awesome-python Awesome Python A curated list of awesome Python framework ...

  7. js ftpclient linux server,Node.JS用Socket实现FTP Server服务器和Client客户端

    通信过程 FTP协议其实就是主机和服务通过Socket进行固定格式的通信过程,当某客户端连接到FTP 服务器后,客户端发送指令: [参数] 服务会按以下格式返回: [参数或说明] 例如以下是FileZ ...

  8. python3 ftp服务器_python3实现ftp服务功能(服务端 For Linux)

    本文实例为大家分享了python3实现ftp服务功能的具体代码,供大家参考,具体内容如下 功能介绍: 可执行的命令: ls pwd cd put rm get mkdir 1.用户加密认证 2.允许多 ...

  9. centos7.6下的python3.6.9虚拟环境安装elastalert

    centos7.6安装python3.6.9+elastalert1.编译安装python3.6.9环境 # 安装依赖 yum -y install zlib-devel bzip2-devel op ...

最新文章

  1. flink source code
  2. ubuntu终端显示乱码的解决
  3. 根据树的两种遍历序列求第三种遍历序列
  4. 关键字—修饰方法、类、属性和变量的关键字(共9个)
  5. asset文件夹路径 unity_我们来捣鼓一下Unity的平台跳跃Microgame
  6. java web项目初始化启动一个java方法
  7. 将EnyimMemcached从.NET Core RC1升级至RC2
  8. JenkinsDay18-查看服务器有哪些JOB
  9. [日志]说一个人长的丑!如何说?
  10. Proteus 8.4软件安装教程
  11. ZLG USBCAN-II+ Linux驱动安装make报错问题
  12. go字符串转byte_go语言中int和byte转换方式
  13. 红旗h5中控台恢复出厂设置后不显示倒车影像问题
  14. 红帽子企业Linux 5安装序列号
  15. Cannot define dimension expressions when an array initializer is provided 错误
  16. 如何二叉树里面查找一个数
  17. STM32-M3(野火)SD卡读写/移植znFAT文件访问系统
  18. kdj值应用口诀_KDJ指标神奇的操作方法详解
  19. Android系统中的输入输出设备
  20. [nk] 糟糕的打谱员 线性DP

热门文章

  1. 浅谈Ubuntu上离线安装包的制作与安装问题
  2. SecureCRT使用
  3. 计算机二级关于数据结构的题目,计算机二级MS OFFICE 练习题(一五三)
  4. linux桌面文件夹改图标,Linux 给桌面程序设置个性化图标
  5. 深度学习100例-卷积神经网络(CNN)识别验证码 | 第12天
  6. MongoDB导出csv格式数据
  7. Redis中bitmap的妙用 1
  8. 1号店11.11:从应用架构落地点谈高可用高并发高性能
  9. 中央纪委网站:​深度关注 | 元宇宙如何改写人类社会生活
  10. 比特币与企业级区块链的区别