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

下面是其定义:

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

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

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

 import pexpect
import sys #通过spawn类启动和控制子应用程序
child = pexpect.spawn('ssh root@192.168.1.22') #将pexpect的输入输出信息写到mylog.txt文件中
fout = file('mylog.txt','w')
child.logfile = fout #将pexpect的输入输出信息输出到标准输出
#child.logfile = sys.stdout #expect方法用来判断子程序产生的输出,判断是否匹配相应字符串
child.expect('password:')
#字符串匹配则使用sendline进行回应-----send:发送命令,不回车、sendline:发送命令,回车、sendcontrol:发送控制符,如:sendctrol('c')等价于‘ctrl+c'、sendeof:发送eof
child.sendline('')
child.expect('#')
child.sendline('ls -lh')
child.expect('#')

pexpect之spawn类

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

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

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

其常用方法是:

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

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

 from pexpect import pxssh
import getpass try:
s = pxssh.pxssh() #创建pxssh对象 hostname = raw_input('hostname:')
username = raw_input('username:')
password = getpass.getpass('password:') #接收密码输入 s.login(server=hostname,username=username,password=password) #建立ssh连接 s.sendline('uptime') #运行uptime命令
s.prompt() #匹配系统提示符
print s.before #打印出现系统提示符前的命令输出 s.sendline('ls -lh') #运行命令
s.prompt() #匹配系统提示符
print s.before #打印出现系统提示符前的命令输出 s.sendline('df -h') #运行命令
s.prompt() #匹配系统提示符
print s.before #打印出现系统提示符前的命令输出 s.logout() #断开ssh连接 except pxssh.ExceptionPxssh as e:
print 'pxssh failed on login'
print str(e)

pxssh类

 

python之pexpect模块的更多相关文章

  1. python的pexpect模块

    Pexpect 是 Don Libes 的 Expect 语言的一个 Python 实现,是一个用来启动子程序,并使用正则表达式对程序输出做出特定响应,以此实现与其自动交互的 Python 模块. P ...

  2. [python]使用pexpect模块进行批量scp

    #!/usr/bin/env python# -*- coding: utf-8 -*- #wangxiaofei #awcloud自动化测试 import time,osimport threadi ...

  3. 8.python 系统批量运维管理器之pexpect模块

    小插曲 前几节讲了paramiko模块,但是pexpect模块的功能几乎跟paramiko一样,先来分析一下: 1.各自介绍 pexpect是一个通过启动子程序,使用正则表达式对程序输出做出特定响应, ...

  4. Python中的Pexpect模块的简单使用

    Pexpect 是一个用来启动子程序并对其进行自动控制的 Python 模块. Pexpect 可以用来和像 ssh.ftp.passwd.telnet 等命令行程序进行自动交互.以下所有代码都是在K ...

  5. Pexpect模块的安装

    Pexpect模块的安装 下载地址:https://pypi.python.org/pypi/pexpect/ 解压后在目录下运行:python ./setup.py install (必须是root ...

  6. python之常用模块4

    pyinotify模块 pip3 install pyinotify pyinotify提供的事件: 事件标志 事件含义 IN_ACCESS 被监控项目或者被监控目录中的文件被访问,比如一个文件被读取 ...

  7. python的pexpect详解

    Pexpect 是一个用来启动子程序并对其进行自动控制的纯 Python 模块. Pexpect 可以用来和像 ssh.ftp.passwd.telnet 等命令行程序进行自动交互.继第一部分< ...

  8. pexpect模块

    pexpect用来启动子程序,使用正则表达式对程序输出做出特定响应,以此实现与其自动交互的python模块,当然我们可以使用他来做ssh登陆,ssh模块登陆还有一个基于python实现远程连接,用于s ...

  9. python的库有多少个?python有多少个模块?

    这里列举了大概500个左右的库: !   Chardet字符编码探测器,可以自动检测文本.网页.xml的编码. colorama主要用来给文本添加各种颜色,并且非常简单易用. Prettytable主 ...

随机推荐

  1. 编程工具系列之一------使用GDB的堆栈跟踪功能

    在调试程序的过程中,查看程序的函数调用堆栈是一项最基本的任务,几乎所有的图形调试器都支持这项特性. GDB调试器当然也支持这一特性,但是功能更加灵活和丰富. GDB将当前函数的栈帧编号为0,为外层函数 ...

  2. SSIS使用OleDB和Ado.Net两种方式调用 存储过程

    在使用”执行 SQL 任务“组件调用存储过程时,连接方式使用OleDB和Ado.Net稍有不同,结合图例说明一下 当我们使用OleDB时,设置的截图如下: 参数使用?来代替,Parameter Nam ...

  3. 正则表达式入门教程&&经典Javascript正则表达式(share)

    前言 例子: ^.+@.+\\..+$ 这样的代码曾经多次把我自己给吓退过.可能很多人也是被这样的代码给吓跑的吧.继续阅读本文将让你也可以自由应用这样的代码. 正文 教程:正则表达式30分钟入门教程 ...

  4. 行为识别笔记:improved dense trajectories算法(iDT算法)(转载)

    iDT算法是行为识别领域中非常经典的一种算法,在深度学习应用于该领域前也是效果最好的算法.由INRIA的IEAR实验室于2013年发表于ICCV.目前基于深度学习的行为识别算法效果已经超过了iDT算法 ...

  5. java的getClass()函数

    Java反射学习 所谓反射,可以理解为在运行时期获取对象类型信息的操作.传统的编程方法要求程序员在编译阶段决定使用的类型,但是在反射的帮助下,编程人员可以动态获取这些信息,从而编写更加具有可移植性的代 ...

  6. 使用密钥验证方式登录linux系统

    1.使用PuTTY工具PuTTYgen生成密钥对,打开PuTTYgen,点击Generate生成公钥(生成过程动动鼠标会提升进度哦). 2.将公钥(蓝色的是私钥)放到服务器上去: -在/root目录下 ...

  7. 穿越泥地(mud) (BFS)

    问题 C: 穿越泥地(mud) 时间限制: 1 Sec  内存限制: 128 MB提交: 16  解决: 10[提交][状态][讨论版] 题目描述 清早6:00,FJ就离开了他的屋子,开始了他的例行工 ...

  8. 越狱Season 1-Episode 1: the pilot

    the pilot: 美国电视剧新剧开播都会有一个试播来测试观众对新剧的接受程度,以此来决定是否再继续播下去,也可以说是一个开端,第一集,试播 -Tattoo Artist: That's it. t ...

  9. 【NOIP2013】火柴排队

    如果没有这道题的话我连逆序对是啥都不知道QAQ 原题: 涵涵有两盒火柴,每盒装有 n 根火柴,每根火柴都有一个高度.现在将每盒中的火柴各自排成一列,同一列火柴的高度互不相同,两列火柴之间的距离定义为: ...

  10. Draw a Border around any C# Winform Control

    public class MyGroupBox : GroupBox { protected override void OnPaint(PaintEventArgs e) { base.OnPain ...