做淘宝联盟网站,python在线网站,做爰在线观看网站,班级网站建设需求分析Pexpect简介在讲解Pexpect之前#xff0c;我们需要先了解一下Expect这个脚本语言#xff0c;它是由TCL语言实现的#xff0c;主要用于人机交互式对话的自动化控制#xff0c;可以用来完成ssh、ftp、telnet等命令行程序的自动化交互。Pexpect其实就是一个用Python语言实现的…Pexpect简介在讲解Pexpect之前我们需要先了解一下Expect这个脚本语言它是由TCL语言实现的主要用于人机交互式对话的自动化控制可以用来完成ssh、ftp、telnet等命令行程序的自动化交互。Pexpect其实就是一个用Python语言实现的类Expect功能的模块通过它就可以在Python中完成Expect所完成的功能。Pexpect的基本工作流程基本可以分为以下三个步骤首先用spawn来执行一个程序然后用expect方法来等待指定的关键字这个关键字是被执行的程序打印到标准输出上面的最后当发现这个关键字以后使用send/sendline方法发送字符串给这个程序。通常在程序中第一步只需要做一次第二步和第三步会不停的循环来完成整个工作。当然在Pexpect中还有很多其他方法编写程序时可以根据自己的需求选择使用。Pexpect APIspawn类class spawn(SpawnBase):This is the main class interface for Pexpect. Use this class to startand control child applications. # This is purely informational now - changing it has no effectuse_native_pty_fork use_native_pty_forkdef __init__(self, command, args[], timeout30, maxread2000,searchwindowsizeNone, logfileNone, cwdNone, envNone,ignore_sighupFalse, echoTrue, preexec_fnNone,encodingNone, codec_errorsstrict, dimensionsNone,use_pollFalse):通过spawn()方法用来执行一个程序返回程序的操作句柄后续就可以通过操作句柄来与这个程序进行交互了。# 子程序退出时会引发pexpect.EOF异常即如果捕捉到pexpect.EOF则说明子程序已退出process pexpect.spawn(ls -l)process.expect(pexpect.EOF)result process.before.decode()print(result)command参数并不支持字符的特殊含义(比如管道符、通配符、重定向符等)在Linux系统中如果想使用这些符号的特殊含义就必须加上shell来运行。# 示例一process pexpect.spawn(bash -c ls -l | wc -l)process.expect(pexpect.EOF)# 示例二# 第一个参数为主程序而args列表里的元素是主程序的参数process pexpect.spawn(bash, [-c, ls -l | wc -l])process.expect(pexpect.EOF)expect()方法当使用spawn()方法启动了一个程序并返回程序控制句柄后就可以使用expect()方法来等待指定的关键字了。关键字可以是字符串、正则表达式、EOF、TIMEOUT或者以上类型组成的列表用来匹配子程序返回的结果。如果只提供字符串等非列表则匹配成功后返回0如果提供列表则返回匹配成功的列表元素的索引匹配失败会抛出异常。process pexpect.spawn(ls -l)# 匹配expect字符process.expect(expect)before/after/match当expect()匹配到关键字之后系统会自动给这三个变量赋值通过这三个变量可以获取子程序运行输出。before保存了到匹配到关键字为止缓存里面已有的所有数据。也就是说如果缓存里缓存了100个字符的时候匹配到了关键字那before就是除了匹配到的关键字之外的所有字符。after保存了匹配到了关键字。match保存的是匹配到的正则表达式的实例和上面的after相比一个是匹配到的字符串一个是匹配到的正则表达式实例。process pexpect.spawn(ls -l)process.expect(expect)print(process.before.decode())print(process.after.decode())print(process.match)如果expect()过程中发生错误那么before保存到目前为止缓存里的所有数据after和match都是None。如果没匹配成功则会抛出异常可以通过匹配异常让异常不在终端显示。process pexpect.spawn(ls -l)# 返回0表示匹配成功返回1和2表示匹配到了异常index process.expect([expect, pexpect.EOF, pexpect.TIMEOUT])print(index)send()/sendline()方法sendline()和send()的区别就是sendline()发送的是带回车符的字符串。process pexpect.spawn(nslookup)process.expect()process.sendline(www.baidu.com)process.expect()print(process.before.decode())process.sendline(exit)Pexpect还提供了很多其他方法这里不再详细阐述使用时可参考其官方文档。interact()方法interact()表示将终端控制权交给用户(或者说将标准输入交给用户)。通常情况下Pexpect会接管所有的输入和输出如果需要用户介入完成部分工作的时候interact()就派上用场了。# 让出控制权给用户process.interact()# 通过设置escape_character的值定义返回码当用户输入此值后会将控制权重新交给pexpectprocess.interact(escape_character\x1d, input_filterNone, output_filterNone)应用示例接下来通过SSH连接远程服务器的示例来体验下Pexpect的使用方法。#!/usr/bin/env python3.6#-*- coding:utf-8 -*-import pexpectdef main(server):command ssh -p %s %s%s % (server[port], server[username], server[hostname])process pexpect.spawn(command, timeout30)print(f命令: {command})expect_list [yes/no,password:,pexpect.EOF,pexpect.TIMEOUT,]index process.expect(expect_list)print(f匹配到: {index} {expect_list[index]})if index 0:process.sendline(yes)expect_list [password:,pexpect.EOF,pexpect.TIMEOUT,]index process.expect(expect_list)print(f匹配到: {index} {expect_list[index]})if index 0:process.sendline(server[password])process.interact()else:print(EOF or TIMEOUT)elif index 1:process.sendline(server[password])process.interact()else:print(EOF or TIMEOUT)if __name__ __main__:server {hostname: 192.168.1.100,port: 22,username: admin,password: ABuklhsfnVyxI,}main(server)以上就是python Pexpect模块的使用的详细内容更多关于python Pexpect模块的资料请关注脚本之家其它相关文章