python3+ftplib实现ftp客户端
2018-07-11 15:39
791 查看
一、程序说明
1.1 程序实现关键点
python实现ftp客户端,主要会遇到以下四个问题:
第一个问题是使用什么包实现----我们这里是使用标准库中的ftplib
第二个问题是怎么连接登录ftp服务器----如果是ssh那么直接使用connect函数就直接完成连接和登录两项工作,而ftp要先用connect连接然后再用login登录
第三个问题是怎么实现ftp操作----怎么实现ftp操作这个问题有点麻烦,我们平时使用ftp命令登录后就可以输入下图中的命令进行ftp操作,对于其中少数一些命令ftplib确实支持通过sendcmd方法将命令传过去然后服务端就执行然后返回执行结果,但对于大多数命令ftplib都是通过一个方法去实现的(比如cd命令对应
cwd()方法,
mkdir命令对应
mkd()方法等,参见1.2)
第四个问题是怎么实现文件的上传下载----文件上传下载其实也是ftp操作的一部份,如上面所说ftplib基本是每个命令都使用一个方法去实现,而对于上传的put命令对应的就是storbinary方法,对于下载的get命令对应的就是retrbinary方法。具体参数和用法可参看下边程序源代码
1.2 常用ftp命令与函数对应关系
全部方法及方法参数解析可参看官方文档
ftp命令 | 对应的FTP对象方法 | 备注 |
ls | nlst([pathname]) | Return a list of file names as returned by the NLSTcommand. |
dir | dir([pathname]) | Produce a directory listing as returned by the LISTcommand, printing it to standard output. |
rename | rename(fromname, toname) | Rename file fromname on the server to toname. |
delete | delete(filename) | Remove the file named filename from the server. |
cd | cwd(pathname) | Set the current directory on the server. |
mkdir | mkd(pathname) | Create a new directory on the server. |
pwd | pwd() | Return the pathname of the current directory on the server. |
rmdir | rmd(dirname) | Remove the directory named dirname on the server. |
size(filename) | Request the size of the file named filename on the server. | |
quit | quit() | Send a QUITcommand to the server and close the connection. |
close | close() | Close the connection unilaterally. |
put | storbinary(cmd, fp, blocksize=8192, callback=None, rest=None) | Store a file in binary transfer mode. |
get | retrbinary(cmd, callback, blocksize=8192, rest=None) | Retrieve a file in binary transfer mode. |
1.3 程序截图
程序执行结果截图:
二、程序源代码
import logging from ftplib import FTP class MyFtp(): def __init__(self): self.ftp_client = FTP() # 些函数实现ftp登录 def ftp_login(self,host_ip,username,password): try: self.ftp_client.connect(host_ip,port=21,timeout=10) except : logging.warning('network connect time out') return 1001 try: self.ftp_client.login(user=username, passwd=password) except: logging.warning('username or password error') return 1002 return 1000 # 此函数执行ftp命令,并打印命令执行结果 def execute_some_command(self): # 通运sendcmd方法形式执行pwd命令,为使用形式统一起见不推荐使用此种形式,而且其实大多数命令都是支持这种形式的 command_result = self.ftp_client.sendcmd('pwd') logging.warning('command_result:%s'% command_result) # 通过直接使用pwd方法执行pwd命令,推荐统一使用此种形式 command_result = self.ftp_client.pwd() logging.warning('command_result:%s' % command_result) # 上传文件;'stor ftp_client.py'告诉服务端将上传的文件保存为ftp_client.py,open()是以二进制读方式打开本地要上传的文件 command_result = self.ftp_client.storbinary('stor ftp_client.py',open("ftp_client.py",'rb')) logging.warning('command_result:%s' % command_result) # 下载文件;'retr .bash_profile'告诉服务端要下载服务端当前目录下的.bash_profile文件,open()是以二进制写方式打开本地要存成的文件 command_result = self.ftp_client.retrbinary('retr .bash_profile', open('local_bash_profile', 'wb').write) logging.warning('command_result:%s' % command_result) # 此函数实现退出ftp会话 def ftp_logout(self): logging.warning('now will disconnect with server') self.ftp_client.close() if __name__ == '__main__': # 要连接的主机ip host_ip = '192.68.220.128' # 用户名 username = 'ls' # 密码 password = 'abcd1234' # 实例化 my_ftp = MyFtp() # 如果登录成功则执行命令,然后退出 if my_ftp.ftp_login(host_ip,username,password) == 1000: logging.warning('login success , now will execute some command') my_ftp.execute_some_command() my_ftp.ftp_logout()
参考:
https://docs.python.org/3/library/ftplib.html
pwd()
相关文章推荐
- Python使用ftplib实现简易FTP客户端的方法
- Python使用ftplib实现简易FTP客户端的方法
- python实现ftp客户端示例分享
- python3实现ftp服务功能(客户端)
- python实现简单ftp客户端的方法
- python实现简单ftp客户端的方法
- 用python的ftplib模块编写ftp客户端程序
- Python实现的FTP通信客户端与服务器端功能示例
- 基于ftplib的交互式ftp客户端实现
- 用python的ftplib模块编写ftp客户端程序
- python实现ftp客户端示例分享
- python之模块ftplib(FTP协议的客户端)
- 使用 Socket 通信实现 FTP 客户端程序
- Python警察与小偷的实现之一客户端与服务端通信实例
- web上实现类似ftp客户端上传和下载
- 使用c++实现一个FTP客户端(三)
- Python HTTP客户端如何实现自定义Cookie
- python实现ftp的基本功能
- Python之——实现自动化FTP操作
- python定时采集摄像头图像上传ftp服务器功能实现