python自动化运维五:pexpect
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的更多相关文章
- python自动化运维五:paramiko
p { margin-bottom: 0.25cm; line-height: 120% } a:link { } paramiko是基于python实现的SSH2远程安全连接,支持认证以及密钥方式, ...
- Python自动化运维之pexpect从入门到精通
1. 应用场景 模拟ssh, telnet远程登录, 模拟ftp文件上传 2. 安装 参考资料: <pexpect实例分析>https://www.ibm.com/developerwor ...
- 【目录】Python自动化运维
目录:Python自动化运维笔记 Python自动化运维 - day2 - 数据类型 Python自动化运维 - day3 - 函数part1 Python自动化运维 - day4 - 函数Part2 ...
- Python自动化运维:技术与最佳实践 PDF高清完整版|网盘下载内附地址提取码|
内容简介: <Python自动化运维:技术与最佳实践>一书在中国运维领域将有“划时代”的重要意义:一方面,这是国内第一本从纵.深和实践角度探讨Python在运维领域应用的著作:一方面本书的 ...
- Python自动化运维 技术与最佳实践PDF高清完整版免费下载|百度云盘|Python基础教程免费电子书
点击获取提取码:7bl4 一.内容简介 <python自动化运维:技术与最佳实践>一书在中国运维领域将有"划时代"的重要意义:一方面,这是国内第一本从纵.深和实践角度探 ...
- python自动化运维之CMDB篇-大米哥
python自动化运维之CMDB篇 视频地址:复制这段内容后打开百度网盘手机App,操作更方便哦 链接:https://pan.baidu.com/s/1Oj_sglTi2P1CMjfMkYKwCQ ...
- Day1 老男孩python自动化运维课程学习笔记
2017年1月7日老男孩python自动化运维课程正式开课 第一天学习内容: 上午 1.python语言的基本介绍 python语言是一门解释型的语言,与1989年的圣诞节期间,吉多·范罗苏姆为了在阿 ...
- python自动化运维学习第一天--day1
学习python自动化运维第一天自己总结的作业 所使用到知识:json模块,用于数据转化sys.exit 用于中断循环退出程序字符串格式化.format字典.文件打开读写with open(file, ...
- python自动化运维篇
1-1 Python运维-课程简介及基础 1-2 Python运维-自动化运维脚本编写 2-1 Python自动化运维-Ansible教程-Ansible介绍 2-2 Python自动化运维-Ansi ...
随机推荐
- PhpStorm配置PHP解释器(wampServer版)
PHPStorm(以下简称为PS)和wampServer集成环境安装简单,不再赘述. 本人使用PhpStrom版本为2017.1.4版本. PS刚开始使用会使用自带服务器,但是有几率不能自动匹配到PH ...
- Java读取property配置文件
读取配置文件已经成了Java程序员工作的一项必备技能. 配置文件的优点: 可维护性好 怎么个可维护性好呢? 它会让程序中变化的地方很灵活的配置,不需要修改代码. Java程序部署到服务器上去之后就变成 ...
- Socket异步通信及心跳包同时响应逻辑分析。
有段时间没有更博了,刚好最近在做Socket通信的项目,原理大致内容:[二维码-(加logo)]-->提供主机地址和端口号信息(直接使用[ThoughtWorks.QRCode.dll]比较简单 ...
- 列表操作之定义,切片(取元素)(Python)
学完列表,元组,字典,集合以后,发现他们长的有些像,傻傻分不清,现在回顾下,以代码为例进行分析每一种操作的属性.(英语不佳,错误请忽略) 举栗如下:names = ["hbb",' ...
- Docker安装及基础使用
Docker 安装 在 Mac OS X 系统中,首先你要下载安装包安装:Docker Toolbox 安装过程中,可以选择是否安装 Docker Machine,Docker Compose 等,默 ...
- JavaScript垃圾收集-标记清除和引用计数
JavaScript具有自动垃圾收集机制,执行环境会负责管理代码执行过程中使用的内存. 垃圾收集机制原理:垃圾收集器会按照固定的时间间隔(或代码执行中预定的收集时间), 周期性地执行这一操作:找出那些 ...
- Android学习笔记-ScrollView(滚动条)
本节引言: 本节带来的是Android基本UI控件中的第十个:ScrollView(滚动条),或者我们应该叫他 竖直滚动条,对应的另外一个水平方向上的滚动条:HorizontalScrollView, ...
- PHP执行linux命令mkdir权限问题
在linux系统中,root帐号执行php命令: mkdir('test', 0777); 结果文件的权限依然为: drwxr-xr-x 2 root root Jul 27 19:30 test ...
- 认真地搞OI
新博客的开头 OI生涯的开始 #include<cstdio> int main() { puts("Hello world!"); ; }
- 关于无法使用python执行进入百度页面的代码修改
前几天听了个坑爹的视频教学,按照你们的方法做了,但尼玛,执行下来各种问题啊: 首先进入页面,总是提示开发者模式,删了下次执行又挂了,于是乎我就找网上帖子解决问题,果然被我解决了 先装这两个文件,把浏览 ...