最近在看《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. 元素设置position:fixed属性后IE下宽度无法100%延伸

    元素设置position:fixed属性后IE下宽度无法100%延伸 IE bug 出现条件: 1.div1设置position:fixed属性,并且想要width:100%的效果. 2.div2(下 ...

  2. 如何禁用ListView中的选中效果

    有的时候,我们希望ListView没有选中效果. 导致选中效果出现可能有两方面的原因: 1.每一行View自身可能有选中效果,可以将它的背景设置为透明 2.ListView有一个listSelecto ...

  3. pstack使用和原理

    前言: 最近小组在组织<<深入剖析Nginx>>的读书会, 里面作者提到了pstack这个工具. 之前写JAVA程序, 对jstack这个工具, 非常的喜欢, 觉得很有用. 于 ...

  4. 转载:奇异值分解(SVD) --- 线性变换几何意义(上)

    本文转载自他人: PS:一直以来对SVD分解似懂非懂,此文为译文,原文以细致的分析+大量的可视化图形演示了SVD的几何意义.能在有限的篇幅把这个问题讲解的如此清晰,实属不易.原文举了一个简单的图像处理 ...

  5. ehcache 缓存

    一:详细配置步骤 1,添加ehcache.xml文件 将ehcache.xml文件添加到src路径下面.ehcache.xml文件内容如下 <ehcache> <diskStore  ...

  6. hdu1114 Piggy-Bank ——完全背包

    link:http://acm.hdu.edu.cn/showproblem.php?pid=1114 只不过求得是最小值.没什么可说的,连我都会做……o(╯□╰)o /* ID: zypz4571 ...

  7. android中ListView_SimpleAdapter

    1.首先看下main_activity.xml.其实里面就放了一个ListView. <LinearLayout xmlns:android="http://schemas.andro ...

  8. Wireshark抓包实例分析TCP重复ACK与乱序

    转载请在文首保留原文出处: EMC 中文支持论坛https://community.emc.com/go/chinese 介绍 TCP 的一大常见问题在于重复 ACK 与快速重传.这一现象的发生也是由 ...

  9. CentOS 6 下RPM方式安装MySQL5.6

    CentOS 6 下RPM方式安装MySQL5.6 1. 下载Linux对应的RPM包,如:CentOS6.7_64对应的RPM包,如下:[root@mysql ~]# ll总用量 113808-rw ...

  10. #你好Unity3D#Hierarchy视图监听gameObject点击事件

    今天无意间又找到了个好方法     1 2 3 4 5 6 7 8 9 10 [InitializeOnLoadMethod] static void Start () {   Selection.s ...