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

shell 命令expect使用    https://blog.51cto.com/superleedo/1931418

安装pexpect

打开 https://pypi.org/project/pexpect/#files

下载 wget https://files.pythonhosted.org/packages/09/0e/75f0c093654988b8f17416afb80f7621bcf7d36bbd6afb4f823acdb4bcdc/pexpect-4.5.0.tar.gz

tar zxf pexpect-4.5.0.tar.gz

cd pexpect-4.5.0/

python setup.py install

ssh远程登录,登录成功后执行命令‘ls -lh’示例

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import pexpect
import sys
#通过spawn类启动和控制子应用程序
child = pexpect.spawn('ssh root@192.168.1.124')
#将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('#')

ssh登录还可以使用pexpect的run函数实现

pexpect.run('ssh root@192.168.1.124',events={'password:','123456'})

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

from pexpect import pxssh
import getpasstry: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)

自动化FTP示例

#!/usr/bin/env python
# -*- coding: utf-8 -*-form __future__ import unicode_literals  #使用unicode编码
import pexpect
import syschild=pexpect.spawnu('ftp ftp.openbsd.org')
child.expect('(?i)name .*: ') #(?i)忽略大小写
child.sendline('anonymous')
child.expect('(?i)password')
child.sendline('mima123456')
child.expect('ftp> ')
child.sendline('bin') #开启二进制传输
child.expect('ftp> ')
child.sendline('get test.txt')
child.expect('ftp> ')
sys.stdout.write(child.before)
print("Escape character is '^]'.\n")
sys.stdout.write(child.after)
sys.stdout.flush()
child.interact()
child.sendline('bye')
child.close()

远程文件打包并下载示例

#!/usr/bin/env python
# -*- coding: utf-8 -*-import pexpect
import sysip="192.168.1.124"
user="root"
passwd="kkl123456"
target_file="/data/logs/nginx.log"child=pexpect.spawn('/usr/bin/ssh', [user+'@'+ip])
fout=file('mylog.txt','w')
child.logfile=fouttry:child.expect('(?i)password')child.sendline(passwd)child.expect('#')child.sendline('tar -zcf /data/logs/nginx.tar.gz ' +target_file)child.expect('#')print child.beforechild.sendline('exit')fout.close()
except EOF:print "expect EOF"
except TIMEOUT:print "expect TIMEOUT"child=pexpect.spawn('/usr/bin/scp', [user+'@'+ip+':/data/logs/nginx.tar.gz','/home'])
fout=file('mylog.txt','a')
child.logfile=fouttry:child.expect('(?i)password')child.sendline(passwd)child.expect(pexpect.EOF)
except EOF:print "expect EOF"
except TIMEOUT:print "expect TIMEOUT"

转载于:https://blog.51cto.com/superleedo/2119076

python 使用pexpect实现自动交互示例相关推荐

  1. python之pexpect实现自动交互

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

  2. python send 案例_python之pexpect实现自动交互的例子

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

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

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

  4. python pexpect telnet_使用python的pexpect模块,实现远程免密登录的示例

    说明 当我们需要用脚本实现,远程登录或者远程操作的时候,都要去解决如何自动输入密码的问题,一般来说有3种实现方式: 1).配置公钥私钥 2).使用shell下的命令,expect 3).使用pytho ...

  5. pexpect自动交互详解

    概述 通过本系列第一部分<探索 Pexpect,第 1 部分:剖析 Pexpect >(请参阅参考资料)的介绍,相信大家已经对 Pexpect 的用法已经有了比较全面的了解,知道 Pexp ...

  6. python代替shell脚本_自动化shell脚本except与python的pexpect模块

    expect脚本 expect是什么 expect是一个免费的编程工具,用来实现自动的交互式任务,而无需人为干预.说白了,expect就是一套用来实现自动交互功能的软件. 在实际工作中,我们运行命令. ...

  7. Python的Pexpect详解 [图片]

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

  8. Python的Pexpect库

    Pexpect 是一个用来启动子程序并对其进行自动控制的纯 Python 模块. Pexpect 可以用来和像 ssh.ftp.passwd.telnet 等命令行程序进行自动交互.本文主要是针对ss ...

  9. power bi示例文件_Power BI桌面问答数据交互示例

    power bi示例文件 The Q&A feature in Power BI desktop provides a way to move towards Artificial Intel ...

最新文章

  1. 特斯拉员工自曝:为应付产能不惜偷工减料,出厂测试得过且过
  2. windows如何安装python-windows下安装python过程
  3. Linux内核 - tcp发送数据从应用到驱动经历的函数调用
  4. 六十七、二分查找算法及其四个变形问题
  5. 功率谱和频谱的区别、联系
  6. python替代hadoop_Python连接Hadoop数据中遇到的各种坑(汇总)
  7. Android 功耗优化(3)---Android后台调度与省电
  8. java 可变参数列表 数组_java可变参数列表如何填充数组?
  9. Linux 网络性能测试工具 iperf 的安装和使用
  10. 超好用的文件转换神器!拿走不谢~
  11. 卸载 mysql 2008_卸载sql server 2008
  12. EmmyLua ProtoBuf Api提示
  13. java pojo类
  14. 用了三年teambition的我,为什么改用飞项了?
  15. conversion failed: could not load input document
  16. 广州医保上线移动支付:暂只针对普通门诊
  17. 什么是CSDN开源社区
  18. android输入法框架分析,Android与iOS输入法开发框架比较谈
  19. pytest—pytest.mark.parametrize的使用
  20. CSDN-markdown编辑器啊啊飒飒大

热门文章

  1. 通过gdb调试分析Linux内核的启动过程
  2. sfs2x 连接 mongodb
  3. Linux命令之感叹号 !
  4. Hibernate 语句总结
  5. python 只去除英文_如何使用 Python 制作词云(Word Cloud)-英文词云篇
  6. php注册树模式,PHP设计模式之详记注册树模式
  7. vs 设置起始页不见了_发朋友圈屏蔽爸妈,结果不小心设置成了仅家人可见...场面一发不可收拾哈哈哈哈!...
  8. ES学习笔记之-ClusterState的学习
  9. 一个指针变量到底占几个字节
  10. 2020年中国消费市场发展报告