一、程序说明

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 NLST command.
dir dir([pathname])  Produce a directory listing as returned by the LIST command, 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 QUIT command 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()

python3+ftplib实现ftp客户端的更多相关文章

  1. Python的网络编程[1] -> FTP 协议[2] -> 使用 ftplib 建立 FTP 客户端

    使用 ftplib 建立 FTP 客户端 用于建立FTP Client,与 pyftplib 建立的 Server 进行通信. 快速导航 1. 模块信息 2. 建立 FTP 客户端 1. 模块信息 1 ...

  2. CentOS7 安装Python3,开发SocketIO 客户端

    CentOS7安装Python3,开发SocketIO 客户端 参考:https://blog.csdn.net/lovefengruoqing/article/details/79284573 步骤 ...

  3. 【转载】HTTP/FTP客户端开发库:libwww、libcurl、libfetch

    网页抓取和ftp访问是目前很常见的一个应用需要,无论是搜索引擎的爬虫,分析程序,资源获取程序,WebService等等都是需 要的,自己开发抓取库当然是最好了,不过开发需要时间和周期,使用现有的Ope ...

  4. 【python】FTP客户端

    Python中默认安装的ftplib模块定义了FTP类,其中函数有限,可用来实现简单的ftp客户端,用于上传或下载文件,函数列举如下 ftp登陆连接 from ftplib import FTP #加 ...

  5. 【HTTP/FTP客户端库】

    [HTTP/FTP客户端库]资料来源:http://curl.haxx.se/libcurl/competitors.html Free Software and Open Source projec ...

  6. 使用 Socket 通信实现 FTP 客户端程序(来自IBM)

    FTP 客户端如 FlashFXP,File Zilla 被广泛应用,原理上都是用底层的 Socket 来实现.FTP 客户端与服务器端进行数据交换必须建立两个套接字,一个作为命令通道,一个作为数据通 ...

  7. Socket网络编程--FTP客户端

    Socket网络编程--FTP客户端(1)(Windows) 已经好久没有写过博客进行分享了.具体原因,在以后说. 这几天在了解FTP协议,准备任务是写一个FTP客户端程序.直接上干货了. 0.了解F ...

  8. ftp客户端命令使用简记

    OS:windows8.1评估版 程序和功能 tftp客户端勾选上 Win+R:运行,键入cmd,键入ftp -help 如下图: 使用ftp客户端可以做的事:将文件传送到运行FTP服务器服务(经常称 ...

  9. Socket网络编程--FTP客户端(1)(Windows)

    已经好久没有写过博客进行分享了.具体原因,在以后说. 这几天在了解FTP协议,准备任务是写一个FTP客户端程序.直接上干货了. 0.了解FTP作用 就是一个提供一个文件的共享协议. 1.了解FTP协议 ...

随机推荐

  1. 无法获取未定义或 null 引用的属性“contentWindow”

    在iframe 中有时候 这样使用contentWindow 会报   无法获取未定义或 null 引用的属性“contentWindow”   这种情况 我是在IE中遇到 其他浏览器一切正常. pa ...

  2. 【BZOJ】2734: [HNOI2012]集合选数

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2734 考虑$N=4$的情况: \begin{bmatrix} 1&3 &X ...

  3. hiho #1196 : 高斯消元·二

    #1196 : 高斯消元·二 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 在上一回中,小Hi和小Ho趁着便利店打折,买了一大堆零食.当他们结账后,看到便利店门口还有其 ...

  4. JCF

    点我 补两个红黑树原理:https://www.cnblogs.com/yyxt/p/4983967.html   https://www.cnblogs.com/skywang12345/p/324 ...

  5. 分组查询以及having使用

    Group  by 注意事项:对查询的列有限制,除了聚合函数外,就必须是分组的项 order  by总是放在最后 代码示例: select Gender as 性别 ,count (Gender) a ...

  6. STL_map.修改删除

    1.修改示例 int TdrSvgAttr::AttrSet_mem(bool _bAttrInStyle, string &_strAttrName, string& _strAtt ...

  7. Android开发代码规范总结

    本篇开始总结Android开发中的一些注意事项,提高代码质量(仅供参考): 1.  Activity间的数据通信,对于数据量比较大的,避免使用 Intent + Parcelable 的方式,可以考虑 ...

  8. 简单理解Hadoop架构原理

    一.前奏 Hadoop是目前大数据领域最主流的一套技术体系,包含了多种技术. 包括HDFS(分布式文件系统),YARN(分布式资源调度系统),MapReduce(分布式计算系统),等等. 有些朋友可能 ...

  9. mysql 安装成功以及第一次安装成功初始化密码操作

    一 把文件解压到一个目录下 这是解压后的目录 将my.ini文件考进去 双击打开my.ini 找到这两行更改成自己的解压路径保存 右键此电脑属性 找到高级系统设置配置环境变量 环境变量   新建 变量 ...

  10. EOJ Monthly 2018.11 D. 猜价格

    猜价格 分两种情况讨论: k≤n,先猜至多 k 次 1,由于回答 <1 肯定是假的,所以可以把剩余系下是哪次错试出来,然后用至多 n 次搞定. k>n,每个数都猜两次,如果两次结果不一样, ...