博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python之pexpect模块
阅读量:7053 次
发布时间:2019-06-28

本文共 1854 字,大约阅读时间需要 6 分钟。

最近在看《Python自动化运维技术与最佳实战》这本书,学到了一个运维中用到的模块:pexpect

下面是其定义:

Pexpect 是一个用来启动子程序并对其进行自动控制的 Python 模块,它可以用来和像 ssh、ftp、passwd、telnet 等命令行程序进行自动交互。

 

从书中我摘取了相关实例并配有注释,用来记录pexpect常用方法:

下面这个实例功能是:以ssh远程登录,登录成功后执行命令‘ls -lh’

1 import pexpect 2 import sys 3  4 #通过spawn类启动和控制子应用程序 5 child = pexpect.spawn('ssh root@192.168.1.22') 6  7 #将pexpect的输入输出信息写到mylog.txt文件中 8 fout = file('mylog.txt','w') 9 child.logfile = fout10 11 #将pexpect的输入输出信息输出到标准输出12 #child.logfile = sys.stdout13 14 #expect方法用来判断子程序产生的输出,判断是否匹配相应字符串15 child.expect('password:')16 #字符串匹配则使用sendline进行回应-----send:发送命令,不回车、sendline:发送命令,回车、sendcontrol:发送控制符,如:sendctrol('c')等价于‘ctrl+c'、sendeof:发送eof17 child.sendline('123456')18 child.expect('#')19 child.sendline('ls -lh')20 child.expect('#')
pexpect之spawn类

当然,ssh登录还可以使用pexpect的run函数实现:

#events是一个字典,定义了expect和sendline的对应关系pexpect.run('ssh root@192.168.1.22',events={
'password:','123456'})

 

 

针对ssh远程登录,pexpect又派生出了pxssh类,在ssh会话操作上再做一层封装

其常用方法是:

login()  #建立ssh连接logout()  #断开ssh连接prompt()  #等待系统提示符,用于等待命令执行结束

 

下面是使用pxssh类来进行远程连接并进行操作的实例:

1 from pexpect import pxssh 2 import getpass 3  4 try: 5     s = pxssh.pxssh()   #创建pxssh对象 6  7     hostname = raw_input('hostname:') 8     username = raw_input('username:') 9     password = getpass.getpass('password:')   #接收密码输入10 11     s.login(server=hostname,username=username,password=password)  #建立ssh连接12 13     s.sendline('uptime')  #运行uptime命令14     s.prompt()   #匹配系统提示符15     print s.before  #打印出现系统提示符前的命令输出16 17     s.sendline('ls -lh')  #运行命令18     s.prompt()   #匹配系统提示符19     print s.before  #打印出现系统提示符前的命令输出20 21     s.sendline('df -h')  #运行命令22     s.prompt()   #匹配系统提示符23     print s.before  #打印出现系统提示符前的命令输出24 25     s.logout()  #断开ssh连接26 27 except pxssh.ExceptionPxssh as e:28     print 'pxssh failed on login'29     print str(e)
pxssh类

 

 

转载于:https://www.cnblogs.com/MacoLee/p/5629837.html

你可能感兴趣的文章
iOS中使用Protocol Buffer
查看>>
大神解析-ZooKeeper基本原理
查看>>
网络层安全认知
查看>>
有趣的二进制2—高效位运算
查看>>
Hive 调优
查看>>
带你五步学会Vue SSR
查看>>
Angular4中自定义管道
查看>>
Android NDK开发之旅26 C++ STL
查看>>
从源码全面剖析 React 组件更新机制
查看>>
MySQL 去重SQL
查看>>
问题备忘: 服务器重启后,导致freeswitch的internal的profile无法启动
查看>>
Java虚拟机之Class类文件结构
查看>>
Service销毁流程
查看>>
Elasticsearch的入门使用
查看>>
An error occurred uploading to the iTunes Store.
查看>>
Mac HomeBrew国内镜像安装方法
查看>>
《Android源码设计模式解析与实战》——面向对象的六大原则的图片加载器源码...
查看>>
神奇的 defineProperty
查看>>
使用element ui 日期选择器获取值后的格式问题
查看>>
手把手教你高效快捷的创建Swift Framework
查看>>