Python对FTP交互封装的实现

目录
  • 使用工具:
  • ftp登录脚本
  • pexpect组件简介
    • 1. spawn类
    • 2. run函数

使用工具:

  • pexpect库

pexpect可以理解为Linux下expect(不知道的可以百度下linux expect)的python封装。
通过pexpect可以实现对ssh、ftp、passwd、telnet等命令进行自动交互,而无需人工干涉来达到自动化的目的。
比如我们可以模拟一个FTP登录时的所有交互,包括输入主机地址、用户名、密码,还有对文件上传下载操作等等,若出现异常,我们也可以进行自动化处理。

ftp登录脚本

实现登录,文件上传下载

import pexpect

class  FTP(object):
    def __init__(self,ip:str,user,passwd) : #初始化这些函数
        self.ip = ip
        self.user=user
        self.passwd = passwd
        self.child = None

    def ftp_open(self):
        self.child = pexpect.spawnu(f'10.0.0.1')
        # print({self.ip})
        self.child.expect(f'username')
        self.child.sendline(f'username')

        self.child.expect('(?i)password')
        self.child.sendline(f'password')
        self.child.expect('ftp> ',timeout=60)

    def ftp_up_down(self):        
        self.child.sendline('put /tmp/test.dat /pub/test002.dat')
        self.child.expect('ftp> ',timeout=60)       
        self.child.sendline('get /pub/test002.dat /tmp/test003.dat')
        self.child.expect('ftp> ',timeout=60)

    def ftp_up_down_port(self):   
        self.child.sendline('passive')
        self.child.expect('ftp> ',timeout=60)       
        self.child.sendline('put /tmp/test.dat pub/test002.dat')
        self.child.expect('ftp> ',timeout=60)    
        self.child.sendline('get /pub/test002.dat /tmp/test003.dat')
        self.child.expect('ftp> ',timeout=60)

    def ftp_close(self):
        self.child.sendline('bye')

该方法实现封装的好处:
1.将登录上传下载退出分为不同方法,方便调用
2.传参灵活,可以任意增加或修改函数

pexpect组件简介

1. spawn类

spanw是pexpect的主要接口,功能就是启动和控制子应用程序,spawn()中可以是系统中的命令,但是不会解析shell命令中的元字符,包括重定向“>”,管道符“|”或者通配符“*”,但是我们可以将含有这三个特殊元字符的命令作为/bin/bash的参数进行调用,例如:

she = pexpect.spawn(‘/bin/bash –c “cat /etc/passwd | grep root > log.txt”')
she.expect(pexpect.EOF)

spawn支持使用python列表来代替参数项,比如上述命令可变为:

command = ‘cat /etc/passwd | grep root > log.txt'

she = pexpect.spawn(‘/bin/bash',[‘-c',command])

she.expect(pexpect.EOF)

(1)expect方法:expect定义了子程序输出的匹配规则。也可使用列表进行匹配,返回值是一个下标值,如果列表中有多个元素被匹配,则返回的是最先出现的字符的下标值。
(2)read方法:向子程序发送响应命令,可以理解为代替了我们的键盘输入。

send(self,s)     发送命令,不回车
sendline(self,s='') 发送命令,回车
sendcontrol(self,char)      发送控制字符test.sendcontrol(‘c')等价于“ctrl+c”
sendeof()    发送eof

2. run函数

run是使用pexpect进行封装的调用外部命令的函数,类似于os.system()或os.popen()方法,不同的是,使用run可以同时获得命令的输出结果及其命令的退出状态。

pexpect.run('ssh xxx@x.x.x.x',events={'password:':'xxx'})

events是个字典

到此这篇关于Python对FTP交互封装的实现的文章就介绍到这了,更多相关Python FTP交互封装内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • python连接远程ftp服务器并列出目录下文件的方法

    本文实例讲述了python连接远程ftp服务器并列出目录下文件的方法.分享给大家供大家参考.具体如下: 这段python代码用到了pysftp模块,使用sftp协议,对数据进行加密传输 import pysftp srv = pysftp.Connection(host="your_FTP_server", username="your_username",password="your_password") # Get the directory

  • python实现支持目录FTP上传下载文件的方法

    本文实例讲述了python实现支持目录FTP上传下载文件的方法.分享给大家供大家参考.具体如下: 该程序支持ftp上传下载文件和目录.适用于windows和linux平台. #!/usr/bin/env python # -*- coding: utf-8 -*- import ftplib import os import sys class FTPSync(object): conn = ftplib.FTP() def __init__(self,host,port=21): self.c

  • python从ftp下载数据保存实例

    <hadoop权威指南>的天气数据可以在ftp://ftp3.ncdc.noaa.gov/pub/data/noaa下载,在网上看到这个数据好开心,打开ftp发现个问题,呀呀,这么多文件啊,我一个个去点另存为,得点到啥时候啊,迅雷应该有批量下载,只是我没找到,估计是我浏览器把迅雷禁掉了,干脆自己用python写一个实现下载好了,网上早了一下,发现很简单啊 复制代码 代码如下: #!/usr/bin/python#-*- coding: utf-8 -*- from ftplib import

  • 通过python下载FTP上的文件夹的实现代码

    复制代码 代码如下: # -*- encoding: utf8 -*-import osimport sysimport ftplibclass FTPSync(object):    def __init__(self):        self.conn = ftplib.FTP('10.22.33.46', 'user', 'pass')        self.conn.cwd('/')        # 远端FTP目录        os.chdir('/data/')       

  • python实现的简单FTP上传下载文件实例

    本文实例讲述了python实现的简单FTP上传下载文件的方法.分享给大家供大家参考.具体如下: python本身自带一个FTP模块,可以实现上传下载的函数功能. #!/usr/bin/env python # -*- coding: utf-8 -*- from ftplib import FTP def ftp_up(filename = "20120904.rar"): ftp=FTP() ftp.set_debuglevel(2) #打开调试级别2,显示详细信息;0为关闭调试信息

  • 使用Python操作FTP实现上传和下载的方法

    搭建ftp服务器server端 # -*- coding:utf-8 -*- from pyftpdlib.authorizers import DummyAuthorizer from pyftpdlib.handlers import FTPHandler from pyftpdlib.servers import FTPServer # 实例化DummyAuthorizer来创建ftp用户 authorizer = DummyAuthorizer() # 参数:用户名,密码,目录,权限 a

  • python实现FTP服务器服务的方法

    FTP服务的主动模式和被动模式 在开始之前,先聊一下FTP的主动模式和被动模式,两者的区别 , 用两张图来表示可能会更加清晰一些: 主动模式: 主动模式工作过程: 1. 客户端以随机非特权端口N,就是大于1024的端口,对server端21端口发起连接 2. 客户端开始监听 N+1端口: 3. 服务端会主动以20端口连接到客户端的N+1端口. 主动模式的优点: 服务端配置简单,利于服务器安全管理,服务器只需要开放21端口 主动模式的缺点: 如果客户端开启了防火墙,或客户端处于内网(NAT网关之后

  • Python对FTP交互封装的实现

    目录 使用工具: ftp登录脚本 pexpect组件简介 1. spawn类 2. run函数 使用工具: pexpect库 pexpect可以理解为Linux下expect(不知道的可以百度下linux expect)的python封装.通过pexpect可以实现对ssh.ftp.passwd.telnet等命令进行自动交互,而无需人工干涉来达到自动化的目的.比如我们可以模拟一个FTP登录时的所有交互,包括输入主机地址.用户名.密码,还有对文件上传下载操作等等,若出现异常,我们也可以进行自动化

  • python实现ftp文件传输系统(案例分析)

    最近做了一个简单的文件传输系统,基于ftp协议,使用python语言开发,虽然python里面已经有ftplib模块,可以很容易的实现ftp服务器.这次我使用的是socket实现client与ftp server之间的通讯和文件传输,client另起一个flask服务器,用于用户在浏览器端的交互.系统实现的功能有:用户登录注册,用户查看ftp服务器端文件和下载上传删除操作,支持多进程.多用户. 一,登录注册 该项目使用的是mongo数据库,其实用户登录注册功能很好实现,没有什么技术细节,这里就略

  • Python实现系统交互(subprocess)

    目录 一.os与commands模块 1. os.system()函数实例 2. os.popen()函数实例 3. commands.getstatusoutput()函数实例 二.subprocess模块 1. subprocess模块中的常用函数 2. 上面各函数的定义及参数说明 3. subprocess.CompletedProcess类介绍 4. 实例 三.subprocess.Popen介绍 1.subprocess.Popen的构造函数 2. subprocess.Popen类的

  • python编程matplotlib交互绘制Julia集示例解析

    目录 Julia集 matplotlib绑定事件 缩放 所谓Julia集就是类似下面的美妙的图案 Julia集 特别地,当 c = z的初始值时,符合收敛条件的 z 的便构成大名鼎鼎的Mandelbrot集 在上图中,颜色表示该点的发散速度,可以理解为开始发散时迭代的次数.其生成代码也非常简单: #mbrot.py import numpy as np import time import pyplotlib.pyplot as plt #生成z坐标,axis为起始位置,nx,ny为x向和y向的

  • Python详细介绍模型封装部署流程

    目录 一.桌面应用软件 二.Pyside2&Qt designer 三.模型封装部署 四.Pyinstaller 五.总结 一.桌面应用软件 桌面应用软件是基于GUI(Graphical User Interface,图形用户界面)交互式程序,需要实现GUI库实现前端交互. Python常见的GUI库 TKinter:基于Tk的Python库,这是Python官方采用的标准库,优点是作为Python标准库.稳定.发布程序较小,缺点是控件相对较少: wxPython:基于wxWidgets的Pyt

  • python查看FTP是否能连接成功的方法

    本文实例讲述了python查看FTP是否能连接成功的方法.分享给大家供大家参考.具体如下: #!/usr/local/bin/python #-*- coding: UTF-8 -*- #################################################################### # python 查看FTP是否能连接成功 ##################################################################

  • 更改Python命令行交互提示符的方法

    一.定制Python的交互提示符 Python的默认交互提示符为">>>",但它是可以定制的. Python启动后,先寻找PYTHONSTARTUP环境变量,然后执行此文件中变量指定的执行代码. 一些Linux发布包提供了缺省的启动脚本,一般存放在其home目录,名为.pythonstartup."Tab完成"和"命令历史"这两个功能增强了提示符应用,两者都基于readline模块. 如果没有.pythonstartup文件,可

  • Python实现FTP上传文件或文件夹实例(递归)

    本文实例讲述了Python实现FTP上传文件或文件夹实例.分享给大家供大家参考.具体如下: import sys import os import json from ftplib import FTP _XFER_FILE = 'FILE' _XFER_DIR = 'DIR' class Xfer(object): ''''' @note: upload local file or dirs recursively to ftp server ''' def __init__(self): s

  • python解析xml模块封装代码

    有如下的xml文件: 复制代码 代码如下: <?xml version="1.0" encoding="utf-8" ?>  <root>  <childs>  <child name='first' >1</child>  <child value="2">2</child>  </childs>  </root> 下面介绍python解

  • python操作日志的封装方法(两种方法)

    前言 曾经转载过一篇关于python日志模块logging的详解 https://www.cnblogs.com/linuxchao/p/linuxchao-log.html, 虽然这篇文章是别人写的, 但是我就是靠着这篇文章入门的logging,所以我觉得没必要再继续说些理论的东西,今天就简单的对日志做个封装,实际工作中直接拿去用吧 方法1 """ ------------------------------------ @Time : 2019/5/22 8:12 @Au

随机推荐