基本使用流程

pexpect 的使用说来说去,就是围绕3个关键命令做操作:

  1. 首先用 spawn 来执行一个程序
  2. 然后用 expect 来等待指定的关键字,这个关键字是被执行的程序打印到标准输出上面的
  3. 最后当发现这个关键字以后,根据关键字用 send 方法来发送字符串给这个程序
login()  #建立ssh连接
logout() #断开ssh连接
prompt() #等待系统提示符,用于等待命令执行结束

下面是其定义:

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('123456')
child.expect('#')
child.sendline('ls -lh')
child.expect('#')

pexpect之spawn类

 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 = fout
10
11 #将pexpect的输入输出信息输出到标准输出
12 #child.logfile = sys.stdout
13
14 #expect方法用来判断子程序产生的输出,判断是否匹配相应字符串
15 child.expect('password:')
16 #字符串匹配则使用sendline进行回应-----send:发送命令,不回车、sendline:发送命令,回车、sendcontrol:发送控制符,如:sendctrol('c')等价于‘ctrl+c'、sendeof:发送eof
17 child.sendline('123456')
18 child.expect('#')
19 child.sendline('ls -lh')
20 child.expect('#')

当然,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类来进行远程连接并进行操作的实例:

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类

 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)

转载自

https://www.cnblogs.com/MacoLee/p/5629837.html

https://www.cnblogs.com/lisenlin/p/9058557.html

https://blog.csdn.net/zhongbeida_xue/article/details/78679601

python pexpect总结的更多相关文章

  1. Python Pexpect库的简单使用

    Python Pexpect库的使用 简介 最近需要远程操作一个服务器并执行该服务器上的一个python脚本,查到可以使用Pexpect这个库.记录一下. 什么是Pexpect?Pexpect能够产生 ...

  2. python pexpect 学习与探索

    pexpect是python交互模块,有两种使用方法,一种是函数:run另外一种是spawn类 1.pexpect  module 安装 pexpect属于第三方的,所以需要安装, 目前的版本是 3. ...

  3. Python pexpect出现错误‘module have no attribute "spawn" 解决办法

    今天我遇到了这个错误,现在将错误总结如下: 1.首先查询一下自己的操作系统,pexpect中的spawn()和run()仅仅运行在POSIX系统上,在WINDOWS下是没有这两个东西的,在官网http ...

  4. python pexpect包的一些用法

    转自:https://www.jianshu.com/p/cfd163200d12 mark一下,原文中写的挺详细

  5. Python:渗透测试开源项目

    Python:渗透测试开源项目[源码值得精读] sql注入工具:sqlmap DNS安全监测:DNSRecon 暴力破解测试工具:patator XSS漏洞利用工具:XSSer Web服务器压力测试工 ...

  6. Python:渗透测试开源项目【源码值得精读】

    sql注入工具:sqlmap DNS安全监测:DNSRecon 暴力破解测试工具:patator XSS漏洞利用工具:XSSer Web服务器压力测试工具:HULK SSL安全扫描器:SSLyze 网 ...

  7. Python代码样例列表

    扫描左上角二维码,关注公众账号 数字货币量化投资,回复“1279”,获取以下600个Python经典例子源码 ├─algorithm│       Python用户推荐系统曼哈顿算法实现.py│    ...

  8. pexpect获取远端命令执行结果

    类比于shell的expect, python中使用pexpect模块来模拟用户和终端交互.有的时候使用pexpect.sendline发送命令后,在各种条件影响下, 可能并不能保证命令在远端服务器执 ...

  9. python之pexpect模块

    最近在看<Python自动化运维技术与最佳实战>这本书,学到了一个运维中用到的模块:pexpect 下面是其定义: Pexpect 是一个用来启动子程序并对其进行自动控制的 Python ...

随机推荐

  1. libevent(八)激活事件

    激活事件添加流程 事件发生后,需要把对应的event加入到激活事件队列中. 整个流程如下: 对于定时器事件,在timeout_process过程中,会将事件从最小堆中删除. 激活事件处理流程 在eve ...

  2. QML文字灰飞烟灭效果

    QML文字灰飞烟灭效果 1,目的 实现文字化作一缕青烟随风而逝的效果. 2,设计分析 在前面的章节中讲述了如何化作光斑碎片逐渐消失的效果,我们可以借鉴它将光斑换成烟雾,再加入端流产生微风浮动,加上字幕 ...

  3. 【Spark】SparkStreaming与flume进行整合

    文章目录 注意事项 SparkStreaming从flume中poll数据 步骤 一.开发flume配置文件 二.启动flume 三.开发sparkStreaming代码 1.创建maven工程,导入 ...

  4. 【FreeRTOS学习03】小白都能懂的Task Management 任务管理基本概念介绍

    在FreeRTOS中,线程的术语又可以被称之为任务,或许这样更加合适,本文将介绍任务的创建/删除,任务参数的使用,以及任务优先级: 1 软实时和硬实时 硬实时系统的任务运行正确性与响应时限是紧密相关的 ...

  5. 第六次java上机作业

    .编写一个简单程序,要求数组长度为5,静态赋值10,,,,,在控制台输出该数组的值. package mm; public class Test { public static void main(S ...

  6. 移动端网站开发要点-meta设置

    <!DOCTYPE html> <!-- 使用 HTML5 doctype,不区分大小写 --> <html lang="zh-cmn-Hans"&g ...

  7. 内网穿透访问Vue项目的时候出现Invalid Host header解决办法

    适用场景: 在本地的Vue-cli3项目, 需要其他人浏览. 如果没有外网的服务器, 可以把自己的电脑当做服务器. 这时候需要外网的人能访问到自己的电脑. Mac内网穿透工具:natapp Inval ...

  8. 写ssm项目的注意点

    注意事项: 输出台乱码 a链接以post提交 表单提交前验证 onsubmit 属性在提交表单时触发. onsubmit 属性只在 中使用. <form action="/demo/d ...

  9. docker build报错

    docker build 遇到问题 "can  not stat ... APPData\Local\Application Data" 解决方法:

  10. SpringBatch异常To use the default BatchConfigurer the context must contain no more thanone DataSource

    SpringBoot整合SpringBatch项目,已将代码开源至github,访问地址:https://github.com/cmlbeliever/SpringBatch 欢迎star or fo ...