简介:

Pexpect 是 Expect 语言的一个 Python 实现,用于生成子应用程序并自动控制它们,并使用正则表达式对程序输出做出特定响应,以此实现与其自动交互的 Python 模块。本文主要介绍Python pexpect模块的使用及示例代码。

1、Expect工具语言
expect是一个简单的工具语言,它的作者对Expect的定义:是一个实现自动交互功能的软件套件(a software suite for automating interactive tools),使用expect,它能帮助我们在合适的情景下进行合适的交互。

expect 的核心功能,对于设定好的特定匹配形式,以相匹配的动作以应对。每一个expect后所跟的字符串(或者正则表达式)就是脚本所等待的匹配模式,每一个send 所做的工作就是对于各种的模式串,实施相应的动作。

2、pexpect模块的安装

pip install pexpect

3、pexpect模块的使用
Pexpect 系统有两个主要接口;这些是函数run() 和类 s​​pawnspawn 类更强大。run()函数比 spawn 简单,适合快速调用程序。当调用 run() 函数时,它会执行给定的程序,然后返回输出。很容易替代 os.system()

1)spawn()

spawn() 方法用来执行一个程序,它返回这个程序的操作句柄,以后可以通过操作这个句柄来对这个程序进行操作。

注意:spawn() 使用时,需要使用特殊符号的正确含义就必须加上 shell 来运行。

例如,

process = pexpect.spawn('/bin/bash –c "ls –l | grep error > log.txt"')

2)expect()

expect()用来关键字匹配,spawn() 启动了一个程序并返回程序控制句柄后,则可以用 expect() 方法来等待指定的关键字。它最后会返回 0 表示匹配到了所需的关键字,如果后面的匹配关键字是一个列表的话,就会返回一个数字表示匹配到列表中第几个关键字,从 0 开始计算。

3)send()

send()方法用来发送关键字,向程序发送指定的字符串。

4)sendline()

sendline()方法用来发送带回车符的字符串,sendline()send()区别只是在发送的字符串后面加上了回车换行符。

5)sendcontrol()

sendcontrol()方法用于发送控制信号,向子程序发送控制字符,如 Ctrl + C 或者 Ctrl + D 等,需要向子程序发送 Ctrl + C,则可以使用process.sendcontrol('c')

4、使用pexpect执行scp命令
使用pexpect执行scp命令,可以代码中指定密码,不用手动输入,可以批量自动处理。

import pexpectusername='root'
aim_ip='192.168.31.11'
password='Aa123456'
source_file_path='/home/root/cjavapy'
aim_file_path='/home/'
port=22
password_key = '.*assword.*'
command = f'scp {source_file_path}  {username}@{aim_ip}:{aim_file_path}'print("开始在本地服务器上执行指令: ", command)
try:execute = pexpect.spawn(command)execute.expect(password_key)execute.sendline(password)execute.expect(pexpect.EOF)print("拷贝成功")
except:print("拷贝失败")

5、使用pexpect实现自动登陆
可以使用pexpect实现通过密码或密钥文件ssh自动登陆Linux服务器,代码如下,

# -*- coding: utf-8 -*-
#!/usr/bin/pythonimport pexpectdef login_ssh_password(port,user,host,passwd):'''实现pexpect实现ssh的自动化用户密码登录'''if  port and user and host and passwd:ssh = pexpect.spawn('ssh -p %s %s@%s' % (port,user, host))i = ssh.expect(['password:', 'continue connecting (yes/no)?'], timeout=5)if i == 0 :ssh.sendline(passwd)elif i == 1:ssh.sendline('yes\n')  # 交互认证ssh.expect('password: ')ssh.sendline(passwd)index = ssh.expect (["#", pexpect.EOF, pexpect.TIMEOUT])if index == 0:print("logging in as root!")ssh.interact()elif index == 1:print("logging process exit!")elif index == 2:print("logging timeout exit")else:print("Parameter error!")def login_ssh_key(keyfile,user,host,port):'''实现pexpect实现ssh的自动化密钥登录'''if  port and user and host and keyfile:ssh = pexpect.spawn('ssh -i %s -p %s %s@%s' % (keyfile,port,user, host))i = ssh.expect( [pexpect.TIMEOUT,'continue connecting (yes/no)?'], timeout=2)if i == 1:ssh.sendline('yes\n')index = ssh.expect (["#", pexpect.EOF, pexpect.TIMEOUT])else:index = ssh.expect (["#", pexpect.EOF, pexpect.TIMEOUT])if index == 0:print("logging in as root!")ssh.interact()elif index == 1:print("logging process exit!")elif index == 2:print("logging timeout exit")else:print("Parameter error!")def main():'''实现两种方式分别的登录'''login_ssh_password('22','root','192.163.31.11','Aa123456')# login_ssh_key(keyfile="/tmp/id_rsa",port='22',user='root',host='192.168.31.21')if __name__ == "__main__":main()

了解更多分析及数据抓取可查看:
http://data.yisurvey.com:8989/
特别说明:本文旨在技术交流,请勿将涉及的技术用于非法用途,否则一切后果自负。如果您觉得我们侵犯了您的合法权益,请联系我们予以处理。

Python pexpect模块的使用及示例代码相关推荐

  1. python pexpect模块详解_python Pexpect模块如何使用 python Pexpect模块使用代码示例

    python Pexpect模块如何使用?本篇文章小编给大家分享一下python Pexpect模块使用代码示例,文章代码介绍的很详细,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以 ...

  2. python代码示例下载-python爬取音频下载的示例代码

    抓取"xmly"鬼故事音频 import json # 在这个url,音频链接为JSON动态生成,所以用到了json模块 import requests headers = { & ...

  3. python画-使用python画个小猪佩奇的示例代码

    基本原理 选好画板大小,设置好画笔颜色.粗细,定位好位置,依次画鼻子.头.耳朵.眼睛.腮.嘴.身体.手脚.尾巴,完事儿. 都知道,Turtle 是 Python 内置的一个比较有趣味的模块,俗称&qu ...

  4. 用python画佩奇_使用python画个小猪佩奇的示例代码

    基本原理 选好画板大小,设置好画笔颜色.粗细,定位好位置,依次画鼻子.头.耳朵.眼睛.腮.嘴.身体.手脚.尾巴,完事儿. 都知道,Turtle 是 Python 内置的一个比较有趣味的模块,俗称&qu ...

  5. 用python画苹果的代码_使用python画个小猪佩奇的示例代码

    基本原理 选好画板大小,设置好画笔颜色.粗细,定位好位置,依次画鼻子.头.耳朵.眼睛.腮.嘴.身体.手脚.尾巴,完事儿. 都知道,Turtle 是 Python 内置的一个比较有趣味的模块,俗称&qu ...

  6. python代码画小猪佩奇动画片全集_使用python画个小猪佩奇的示例代码

    本文给大家较详细的介绍了使用python画个小猪佩奇的示例代码,感兴趣的朋友一起看看吧 基本原理 选好画板大小,设置好画笔颜色.粗细,定位好位置,依次画鼻子.头.耳朵.眼睛.腮.嘴.身体.手脚.尾巴, ...

  7. python代码示例下载-Python实现多线程下载脚本的示例代码

    0x01 分析 一个简单的多线程下载资源的Python脚本,主要实现部分包含两个类: Download类:包含download()和get_complete_rate()两种方法.download() ...

  8. 在哪里能收到python实例代码-python实现网站微信登录的示例代码

    最近微信登录开放公测,为了方便微信用户使用,我们的产品也决定加上微信登录功能,然后就有了这篇笔记. 根据需求选择相应的登录方式 python实现网站微信登录的示例代码 微信现在提供两种登录接入方式 移 ...

  9. python界面不同按钮实现不同功能-python tkinter实现界面切换的示例代码

    跳转实现思路 主程序相当于桌子: import tkinter as tk root = tk.Tk() 而不同的Frame相当于不同的桌布: face1 = tk.Frame(root) face2 ...

最新文章

  1. 图示评审技术_编制清单报价最需要施工技术课程中的哪些知识?
  2. iOS音频播放(一):概述
  3. java swing 图片切换_使用Javaswing自定义图片作为按钮(原创)
  4. 教你搭建Tiles工程-HelloTiles(附源码)
  5. 用php打出前一天的时间格式,[php]用PHP打印出前一天的时间格式
  6. kpi绩效考核流程图_公开!松松团队KPI绩效考核表分享
  7. 呆错网址导航系统V1.13.18 PHP源码
  8. 回顾我个人的创业经历
  9. 西普实验吧-ctf-web-1
  10. 深入理解 MapReduce
  11. Java SE之正则表达式二:匹配
  12. 哈哈哈哈,这个勒索软件笑死我了!
  13. Navicat Premium 12安装包下载
  14. #10015. 「一本通 1.2 练习 2」扩散
  15. C#软件绑定QQ群验证代码
  16. Vue:前端体系、前后端分离
  17. linux 音频文件切割_Linux 对音频万能处理的命令——SOX
  18. 常见元素 – a元素
  19. 分享一个开源的Springboot博客系统,界面简洁精致,拿来即用
  20. I Need Some Sleep / Eels

热门文章

  1. 左手 右手(5-8)
  2. 电话、身份证、名字信息做脱敏处理
  3. 中柏ezpad4s_超强大屏平板中柏EZpad 4S双系统评测
  4. Quard SPI和QPI的区别
  5. Windows动态链接库(dll)浅析 - 2
  6. 电脑全屏闪回桌面问题
  7. 记一次服务器宕机处理过程
  8. 布局无代码开发,谷歌云在全家桶中加入一道甜品
  9. 约瑟夫环生者死者游戏(JAVA)
  10. 【解决方案】红米蓝牙redmi airdots ,左右耳机无法配对解决办法(亲测可用)