p { margin-bottom: 0.25cm; line-height: 120% }
a:link { }

pexpect是expect的封装,可以实现ssh,ftp,passwd,telnet等命令的自动交互。首先我们来先搭建一个FTP服务器做测试使用。windows下搭建FTP的方法如下:

1 首先计算机右键选择管理,然后点击选择新用户

p { margin-bottom: 0.25cm; line-height: 120% }
a:link { }

二 设置用户名以及密码

p { margin-bottom: 0.25cm; line-height: 120% }
a:link { }

3 然后在控制面板中点击打开或关闭windows功能。要稍微等一下界面弹出来

p { margin-bottom: 0.25cm; line-height: 120% }
a:link { }

4 在internet信息服务下勾选上所有的选项

p { margin-bottom: 0.25cm; line-height: 120% }
a:link { }

5 然后在程序开始命令框里输入IIS搜索出来如下:

p { margin-bottom: 0.25cm; line-height: 120% }
a:link { }

6 右键选择新建FTP站点

p { margin-bottom: 0.25cm; line-height: 120% }
a:link { }

7 按照下图进行设置,服务器就搭好了,在IE中输入ftp ://192.168.0.7就可以访问了

p { margin-bottom: 0.25cm; line-height: 120% }
a:link { }

下面用pexpect来实现一个ftp下载实现:

def pexpect_functon_try():

child=pexpect.spawn('ftp 192.168.0.7')

child.expect('Name .*: ')

child.sendline('ftp_user')

child.expect('Password:')

child.sendline('123')

child.expect('ftp> ')

child.sendline('get test.js')

child.sendline('bye')

(1)pexpect.spawn()是类接口,功能是启动和控制子程序应用,在这里我们使用ftp
192.168.0.7的命令来启动FTP

(2)expect:为了控制子程序的输出,expect用于匹配子程序的输出结果,原型为expect(self,pattern,timeout=-1,searchwindow=None),pattern可以是正则表达式,也可以是正则表达式组成的列表。如果是列表,则expect返回的结果是匹配的列表索引。比如前面第一步执行了ftp
192.168.0.7后,在shell产生的结果如下:最后一行的结果为Name
(192.168.0.7:root)。那么expect就应该匹配Name开头的行

p { margin-bottom: 0.25cm; line-height: 120% }
a:link { }

(3)child.expect('Name .*: ')用于匹配最后一行的命令。

(4)然后采用child.sendline()的方式发送命令传入用户名。

p { margin-bottom: 0.25cm; line-height: 120% }
a:link { }

(5)此时需要输入Password:因此expect继续匹配Password. child.expect('Password:')

(6)child.sendline('123'):输入密码

(7) 正式登陆成功,需要开始输入ftp命令。

p { margin-bottom: 0.25cm; line-height: 120% }
a:link { }

(8) child.expect('ftp> ')继续匹配ftp>

(9)child.sendline('get test.js') 发送命令获取test.js文件。ls -al查看结果,成功获取到了test.js文件

p { margin-bottom: 0.25cm; line-height: 120% }
a:link { }

另外在整个过程中,我们也可以将所有的执行过程全部存入到log中去, 添加如下代码:

fout=file('test.txt','w')

child.logfile=fout

结果如下,整个交互过程都保存了下来。

p { margin-bottom: 0.25cm; line-height: 120% }
a:link { }

当然python有ftplib也可以做到FTP下载。但是功能相比pexpect功能更多,pexpect的run函数还可以对外部命令进行调用。如下:

def pexpect_functon_try_2():

ret=pexpect.run('ls -al')

print ret

得到如下结果:

total 92

drwxr-xr-x 2 root root 4096 Aug 24 11:08 .

drwxr-xr-x 3 root root 4096 Jul 29 10:33 ..

-rw-r--r-- 1 root root 1154 Jul 30 14:22 chapter1.py

-rw-r--r-- 1 root root 3380 Aug 20 15:13 chapter2.py

-rw-r--r-- 1 root root 256 Aug 20 21:55 chapter3.py

-rw-r--r-- 1 root root 398 Aug 21 10:48 chapter4.py

-rw-r--r-- 1 root root 589 Aug 24 11:23 chapter5.py

-rw-r--r-- 1 root root 54 Aug 24 11:10 test.js

-rw-r--r-- 1 root root 46976 Aug 20 15:41 test.png

-rw-r--r-- 1 root root 6433 Aug 20 15:41 test.svg

-rw-r--r-- 1 root root 227 Aug 24 11:10 test.txt

python自动化运维五:pexpect的更多相关文章

  1. python自动化运维五:paramiko

    p { margin-bottom: 0.25cm; line-height: 120% } a:link { } paramiko是基于python实现的SSH2远程安全连接,支持认证以及密钥方式, ...

  2. Python自动化运维之pexpect从入门到精通

    1. 应用场景 模拟ssh, telnet远程登录, 模拟ftp文件上传 2. 安装 参考资料: <pexpect实例分析>https://www.ibm.com/developerwor ...

  3. 【目录】Python自动化运维

    目录:Python自动化运维笔记 Python自动化运维 - day2 - 数据类型 Python自动化运维 - day3 - 函数part1 Python自动化运维 - day4 - 函数Part2 ...

  4. Python自动化运维:技术与最佳实践 PDF高清完整版|网盘下载内附地址提取码|

    内容简介: <Python自动化运维:技术与最佳实践>一书在中国运维领域将有“划时代”的重要意义:一方面,这是国内第一本从纵.深和实践角度探讨Python在运维领域应用的著作:一方面本书的 ...

  5. Python自动化运维 技术与最佳实践PDF高清完整版免费下载|百度云盘|Python基础教程免费电子书

    点击获取提取码:7bl4 一.内容简介 <python自动化运维:技术与最佳实践>一书在中国运维领域将有"划时代"的重要意义:一方面,这是国内第一本从纵.深和实践角度探 ...

  6. python自动化运维之CMDB篇-大米哥

    python自动化运维之CMDB篇 视频地址:复制这段内容后打开百度网盘手机App,操作更方便哦 链接:https://pan.baidu.com/s/1Oj_sglTi2P1CMjfMkYKwCQ  ...

  7. Day1 老男孩python自动化运维课程学习笔记

    2017年1月7日老男孩python自动化运维课程正式开课 第一天学习内容: 上午 1.python语言的基本介绍 python语言是一门解释型的语言,与1989年的圣诞节期间,吉多·范罗苏姆为了在阿 ...

  8. python自动化运维学习第一天--day1

    学习python自动化运维第一天自己总结的作业 所使用到知识:json模块,用于数据转化sys.exit 用于中断循环退出程序字符串格式化.format字典.文件打开读写with open(file, ...

  9. python自动化运维篇

    1-1 Python运维-课程简介及基础 1-2 Python运维-自动化运维脚本编写 2-1 Python自动化运维-Ansible教程-Ansible介绍 2-2 Python自动化运维-Ansi ...

随机推荐

  1. 391.FANUC宏程序编程

    运算符 运算符由2个字母组成,用于两个值的比较,以决定它们是相等还是一个值小于或大于另一个值.注意,不能使用不等号 运算符 含义 EQ 等于(=) NE 不等于 GT 大于 GE 大于或等于 LT 小 ...

  2. Java读取property配置文件

    读取配置文件已经成了Java程序员工作的一项必备技能. 配置文件的优点: 可维护性好 怎么个可维护性好呢? 它会让程序中变化的地方很灵活的配置,不需要修改代码. Java程序部署到服务器上去之后就变成 ...

  3. 上传图片并生成相关缩略图-PHP

    if(!empty($_FILES["fileField"]["name"])){//检测表单传递文件数据 $fileinfo = $_FILES[" ...

  4. 对sppnet网络的理解

    前言: 接着上一篇文章提到的RCNN网络物体检测,这个网络成功的引入了CNN卷积网络来进行特征提取,但是存在一个问题,就是对需要进行特征提取图片大小有严格的限制.当时面对这种问题,rg大神采用的是对分 ...

  5. Centos 6.5 安装python3.6

    废话不多说,直接上步骤 wget https://www.python.org/ftp/python/3.6.2/Python-3.6.2rc1.tgz 进入 https://www.python.o ...

  6. poj 1161 Walls

    https://vjudge.net/problem/POJ-1161 题意:有m个区域,n个小镇,有c个人在这些小镇中,他们要去某一个区域中聚会,从一个区域到另一个区域需要穿墙,问这些人聚到一起最少 ...

  7. 51nod_1122:机器人走方格 V4 (矩阵快速幂)

    题目链接 昨天上随机信号分析讲马氏链的时候突然想到这题的解法,今天写一下 定义矩阵A,Ans=A^n,令A[i][j]表示,经过1次变换后,第i个位置上的机器人位于第j个位置的情况数,则Ans[i][ ...

  8. maven-编译速度优化

    故障描述: 公司搭建了一个新jenkins持续集成环境,jenkins构建job时间越来越长. 原因分析: 系统CPU限制:判断依据,构建中查看日志 tail -f /var/log/messages ...

  9. (转)$.extend()方法和(function($){...})(jQuery)详解

    1.    JS中substring与substr的区别 之前在项目中用到substring方法,因为C#中也有字符串的截取方法Substring方法,当时也没有多想就误以为这两种方法的使用时一样的. ...

  10. (转)maven镜像路径配置

    很多maven包无法自动下载怎么办?设置maven镜像setting.xml <mirror> <id>repo2</id> <mirrorOf>cen ...