python中内置了一个ftp客户端,但是要实现ftp服务端还需要安装一个第三方库pyftpdlib
pyftpdlib
pyftpdlib实现了一个功能完整的异步FTP服务,开源代码地址:
https://github.com/giampaolo/pyftpdlib
安装pyftpdlib
安装方式有很多种,推荐使用pip;
pip 是 Python 的包安装程序。其实,pip 就是 Python 标准库(The Python Standard Library)中的一个包,只是这个包比较特殊,用它可以来管理 Python 标准库(The Python Standard Library)中其他的包。pip 是一个命令行程序。 安装 pip 后,会向系统添加一个 pip 命令,该命令可以从命令提示符运行。
安装pip:
- 安装python; 这个是必须安装的;
下载pip:
> 官网地址:https://pypi.org/project/pip/#downloads; 下载完毕后,解压
打开命令行窗口,进入到pip解压后的目录;执行代码
python3 setup.py install
进行安装,
安装完成后,将pip加入到系统环境变量中
- 验证
打开命令行窗口,输入pip list 或者pip3 list
以上只针对于windows系统,其他系统也可以参考;
安装所需库:
打开命令行窗口,输入执行以下代码,并回车pip install pyftpdlib
等待提示第三库安装成功既可;
启动FTP服务
pyftpdlib 安装成功后,在命令行输入
python3 -m pyftpdlib -p 21
即可启动一个简单的ftp服务,不够默认启动的ftp服务只有一个无密码的匿名用户,如果想添加用户和权限,需要编码实现;
编码实现一个有用户和权限认证的FTP服务端
def ftpServer():
import pyftpdlib
# 该脚本程序是运行在windows上的ftp
from pyftpdlib.authorizers import DummyAuthorizer
from pyftpdlib.handlers import FTPHandler
from pyftpdlib.servers import FTPServer
#实例化虚拟用户
authorizer = DummyAuthorizer()
# 添加用户权限和路径
authorizer.add_user('user', '123456', "d:/", perm="elradfmw")
# 添加匿名用户,只需要路径
authorizer.add_anonymous("d:/")
#初始化ftp句柄
handler = FTPHandler
handler.authorizer = authorizer
#添加被动端口范围
handler.passive_ports = range(2000,20033)
# 监听ip和端口
server = FTPServer(('0.0.0.0', 21), handler)
# 开始服务
server.serve_forever()
运行以上代码,启动一个ftp服务;
ftp客户端
以上在本地启动了一个ftp服务,测试的时候,可以使用windows自有的ftp客户端连接测试;
打开命令行窗口,输入
ftp 127.0.0.1
输入用户,密码
测试结果
另外,python中也内置了ftp客户端库 ftplib
使用python中的FTP客户端
- 首先导入FTP
from ftplib import FTP
- 实例化FTP对象
ftp = FTP()
- 连接ftp,传入host和端口
ftp.connect(host, port)
- 登录到ftp,使用login方法,传入用户密码
ftp.login(u,p)
- 登录ftp成功,进行文件的上传和下载操作;
上传使用storbinary方法:
buf_size = 1024
file_handler = open(local_file, 'rb')
ftp.storbinary('STOR %s' % remote_file, file_handler, buf_size)
file_handler.close()
下载使用retrbinary方法
try:
buf_size = 1024
file_handler = open(local_file, 'wb')
ftp.retrbinary('RETR %s' % remote_file, file_handler.write, buf_size)
file_handler.close()
except Exception as err:
return
执行完FTP操作后,需要关闭连接
ftp.quit()
以上至实现了ftp的日常操作;关于ftp其他相关操作,可以参考官方文档;