体育期望使计算机编程语言成为控制其他应用程序的更好工具,这篇文章主要介绍了计算机编程语言模块之体育期望的安装及使用流程,需要的朋友可以参考下
目录
一、pexpect模块介绍二、Pexpect的安装三、pexpect的核心组件3.1卒类3.1.1简介3.1.2使用流程3.1.4基本属性和方法3.1.5其他发送信息的方法3.1.6其他获取结果的方法3.1.7其他常用方法3.1.8控制子程序方法
一、pexpect模块介绍
体育期望使计算机编程语言成为控制其他应用程序的更好工具。可以理解为Linux操作系统操作系统下的预期的计算机编程语言封装,通过体育期望我们可以实现对ssh、ftp、passwd、telnet等命令行进行自动交互,而无需人工干涉来达到自动化的目的
二、Pexpect的安装
#python2
点安装PE expect
#python3
pip3安装PE expect
三、pexpect的核心组件
3.1 spawn类
3.1.1 简介
是体育期望库的主要对象即接口类用于启动和控制子程序
3.1.2 使用流程
建立卵类的实例,传入要运行的命令。调用卵类的实例方法,与子命令交互。通过交互的信息,完成要实现的相关功能。
3.1.3 构造方法参数
参数说明命令任何系统可执行的命令
参数可直接放入命令
不直接支持管道、通配符、标志输入、输出、错误重定向args=[]专门将命令命令的参数放入这个列表中
以/bin/bash ',['-c ',' cat test | grep gree']形式
实现管道、通配符、标志输入、输出、错误重定向等功能超时=30超出时间,抛出错误maxread=2000从电传打字机(电传打字机)读取信息最大缓冲区日志文件=无指定日志文件,可指定为sys.stdoutcwd=无指定命令运行时的当前目录环境=无指定命令运行时环境变量有哪些编码=无命令运行时,信息编码编解码器_错误='严格'编码转换时的转向
(1)命令
导入预期
child=PE expect。产卵(ls)
孩子。期待(PE expect .EOF)
0
print(child.before.decode())
去-匹普。py nohup。出站-SSL-dos。嘘
index.html巨蟒2号。7 .18 SSL _ flood。嘘
child=PE expect。spawn(' ls-l/home ')
孩子。期待(PE expect .EOF)
0
print(child.before.decode())
共计12人
drwxr-xr-x 12根根4096年12月15日14:52文件
drwxr-xr-x 10根4096根2020年8月13日可选
drwxr-xr-x 2根根4096 2017年七月27日用户
# 不支持管道、通配符、标志输入、输出、错误重定向
child=PE expect。spawn(' ls-l | grep Python ')
孩子。期待(PE expect .EOF)
0
print(child.before.decode())
/bin/ls:无法访问|:没有这样的文件或目录
/bin/ls:无法访问grep:没有这样的文件或目录
/bin/ls:无法访问Python:没有这样的文件或目录
(2)args=[]
# []传入参数列表
child=PE expect。spawn(' ls ',args=['-l ','/home'])
孩子。期待(PE expect .EOF)
0
print(child.before.decode())
共计12人
drwxr-xr-x 12根根4096年12月15日14:52文件
drwxr-xr-x 10根4096根2020年8月13日可选
drwxr-xr-x 2根根4096 2017年七月27日用户
# 实现管道、通配符、标志输入、输出、错误重定向等功能
child=PE expect。spawn('/bin/bash ',['-c ',' ls -al | grep Python'])
孩子。期待(PE expect .EOF)
0
print(child.before.decode())
drwxr-xr-x 18 1000 1000 4096 2月9日20:31 Python-2.7.18
(5)日志文件=无
打开文件
f=打开(' log.txt ',' wb ')
child=PE expect。spawn(' ls-l/home ',logfile=f)
孩子。期待(PE expect .EOF)
0
f.close()
退出()
[root@xxxx-2021 ~]# cat log.txt
共计12人
drwxr-xr-x 12根根4096年12月15日14:52文件
drwxr-xr-x 10根4096根2020年8月13日可选
drwxr-xr-x 2根根4096 2017年七月27日用户
在终端直接显示
f=打开(' log.txt ',' wb ')
child=PE expect。spawn(' ls-l/home ',logfile=f)
孩子。期待(PE expect .EOF)
0
f.close()
退出()
[root@xxxx-2021 ~]# cat log.txt
共计12人
drwxr-xr-x 12根根4096年12月15日14:52文件
drwxr-xr-x 10根4096根2020年8月13日可选
drwxr-xr-x 2根根4096 2017年七月27日用户
(6)CWD=无
child=PE expect。spawnu(' ls-al ',logfile=sys.stdout,cwd='/home ')
孩子。期待(PE expect .EOF)
共计20人
drwxr-xr-x 5根根4096 2017年七月27日。
drwxr-xr-x 28根根4096年12月16日07:56.
drwxr-xr-x 12根根4096年12月15日14:52文件
drwxr-xr-x 10根4096根2020年8月13日可选
drwxr-xr-x 2根根4096 2017年7月27日用户
0
3.1.4 基本属性和方法
描述基本方法expect(pattern,timeout=-1)注意:只列出主要参数。
-pattern:可以是字符串、正则表达式、EOF、TIMEOUT或者上述类型的列表。用于匹配子命令返回的结果。
-从子命令返回的结果中匹配。如果只提供字符串等非列表,匹配成功后返回0;如果提供了列表,则返回匹配成功的列表的序列号;匹配失败将引发异常;
-匹配:
(1)匹配方法是逐字符读出返回的信息进行匹配。
(2)当2)模式为列表时,将匹配从左到右的第一个。
(3)结果可以是多次匹配,但只能从前往后,前边已搜索匹配的内容不会再进行匹配。
(4)回复。匹配时会自动应用DOTALL正则化选项。(.将匹配所有字符,*返回空字符)。
(5)使用' \r\n '匹配行尾($不能用于匹配行尾)
当-timeout默认为-1时,使用默认的超时期限;当设置为None时,它将阻止返回信息。
Send (s=' ')基本属性before:匹配点之前的文本。
之后:内容匹配成功
Match:匹配的匹配对象,匹配失败为None,特殊匹配期望。文件结束
pexpect。超时
它们实际上是两个异常类。
(1)expect()连续匹配
#连续匹配
child=PE expect . spawn(' ls-l ')
child . expect(PE expect。EOF)
0
打印(之前的子文件)
共计8个
-rw-r-r-1 root root 0 Feb 21 19:18 log . txt
drwxr-xr-x 2 root root 4096 Feb 21 19:18测试
drwxr-xr-x 2 root root 4096 Feb 21 19:19 tttt
child=PE expect . spawn(' ls-l ')
child . expect(“test”)
0
打印(child.after)
试验
child.expect('ttt ')
0
打印(child.after)
ttt
#连续匹配列表表单
child=PE expect . spawn(' ls-l ')
child . expect(“test”)
0
打印(child.after)
试验
child.expect('ttt ')
0
打印(child.after)
ttt
child=PE expect . spawn(' ls-l ')
child . expect(“test”)
0
child.expect(['test ',' ttt'])
1 # 1是ttt的列表索引,因为之前已经匹配过测试,不会再匹配文件光标(test before和tttt after)。
(2)发送行(s=“”)
Bash演示
[root@xxxx-2021 ~]# nslookup
https://www.jd.com/
服务器:10.138.48.2
地址:10.138.48.2#53
非权威回答:
***找不到https://www.jd.com/:没有答案
使用sendline实现上述命令行功能:
导入预期
child=PE expect . spawn(' nslookup ')
child.expect(“”)
0
child . sendline(' https://www . JD . com/')
20
child.expect(“”)
0
print(child.before.decode())
https://www.jd.com/
服务器:10.138.48.2
地址:10.138.48.2#53
非权威回答:
***找不到https://www.jd.com/:没有答案
3.1.5 其他发送信息的方法
描述send(s)类似于sendline(),只是将字符串发送到子例程;
不要添加回车(换行符);
打开日志,它将被添加到日志中;
返回发送的字节数;Write(s)与send()方法相同,但没有返回值;writelines(sequence)调用write()方法,将序列中的内容发送给sendcontrol(char),向sendof()发送终止符,类似ctrl d和ctrl d的组合键,一般用于确认sendintr()在最后一次发送内容的缓冲区后发送退出信号。
3.1.6 其他获取结果的方法
方法描述expect_exact()与expect()方法相同,匹配速度更快;
除了pattern,不能使用正则表达式expect_list()来匹配列表。只有编译好的正则表达式,EOF和TIMEOUT被使用。
提高匹配速度;
expect()方法通过其工作读取(size=-1)从子例程输出中读取指定数量的数据。
当size为-1时,直接读取一行数据,直到e of(子程序退出时使用)readline(size=-1)-1;
0返回null
忽略其他值并返回一行;
#发送方法
child=PE expect . spawn(' nslookup ')
child.expect(“”)
0
child.send('www.baidu.com ')
13
child.send('\n ')
一个
child.expect(“”)
0
print(child.before.decode())
www.baidu.com
服务器:10.138.48.2
地址:10.138.48.2#53
非权威回答:
www . Baidu . com canonical name=www.xxx.com。
名称:www.xxx.com
地址:100.59.200.6
名称:www.xxx.com
地址:100.59.200.7
#写入方法
child.write('www.baidu.com\n ')
# writelines方法
child . writelines([' www . Baidu . com ',' \n'])
# sendintr method - False表示子例程已经结束。
child.sendintr()
child.isalive()
错误的
3.1.7 其他常用方法
方法compile_pattern_list(patterns)编译列表中每一项的正则表达式;
多次应用期望匹配时,每次编译后都会匹配列表。
为了提高效率,可以提前调用进行编译;
之后,通过使用expect_list()方法直接匹配的eof()抛出一个EOF错误,它返回true。interact(escape _ character=' \ x \ d ',input _ filter=none,output _ filter=none)实现子程序与用户的直接交互;
打开日志,输入和输出将被记录在日志文件中;
Input_filter和output_filter用于过滤输入和输出;传入的应该是接受字符串参数并返回字符串的函数;
默认的退出键是ctrl]
3.1.8 控制子程序方法
该方法通过发送信号来描述kill(SIG);到子程序;
本文对Python模块pexpect的详细解释到此为止。有关Python模块pexpect的更多信息,请搜索我们以前的文章或继续浏览下面的相关文章。希望大家以后能多多支持我们!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。