发布时间:2019-09-02 07:56:04编辑:auto阅读(1721)
pexpect 的使用说来说去,就是围绕3个关键命令做操作:
第一步只需要做一次,但在程序中会不停的循环第二、三步来一步一步的完成整个工作。掌握这个概念之后 pexpect 的使用就很容易了。当然 pexpect 不会只有这 3 个方法,实际上还有很多外围的其他方法,
spawn() 方法用来执行一个程序,它返回这个程序的操作句柄,以后可以通过操作这个句柄来对这个程序进行操作,比如:
process = pexpect.spawn('ftp sw-tftp')
上面 spawn() 中的字符串就是要执行的程序,这里我们打开一个到 sw-tftp 服务器的 ftp 连接。 spawn() 中的第一个元素就是要执行的命令,除此之外还可以指定一些其他参数,比如: pexpect.spawn('ftp sw-tftp', timeout=60)
就指定了超时时间,这些具体的会在后面讲解。
process 就是 spawn() 的程序操作句柄了,之后对这个程序的所有操作都是基于这个句柄的,所以它可以说是最重要的部分。
注意: spawn() ,或者说 pexpect 并不会转译任何特殊字符 比如 | * 字符在Linux的shell中有特殊含义,但是在 pexpect 中不会转译它们,如果在 linux 系统中想使用这些符号的正确含义就必须加上 shell 来运行,这是很容易犯的一个错误。
正确的方式:
process = pexpect.spawn('/bin/bash –c "ls –l | grep LOG > log_list.txt"')
当 spawn() 启动了一个程序并返回程序控制句柄后,就可以用 expect() 方法来等待指定的关键字了。它最后会返回 0 表示匹配到了所需的关键字,如果后面的匹配关键字是一个列表的话,就会返回一个数字表示匹配到了列表中第几个关键字,从 0 开始计算。
send() 作为3个关键操作之一,用来向程序发送指定的字符串,它的使用没什么特殊的地方,比如:
process.expect("ftp>")
process.send("by\n")
这个方法会返回发送字符的数量。
sendline() 和 send() 唯一的区别就是在发送的字符串后面加上了回车换行符,这也使它们用在了不同的地方:
它也会返回发送的字符数量
sendcontrol() 向子程序发送控制字符,比如 <kbd>ctrl+C</kbd> 或者 <kbd>ctrl+D</kbd> 之类的,比如你要向子程序发送 <kbd>ctrl+G</kbd>,那么就这样写:
process.sendcontrol('g')
简单实例:其常用方法是:
login() #建立ssh连接 logout() #断开ssh连接 prompt() #等待系统提示符,用于等待命令执行结束
上一篇: python动态加载模块、类、函数
下一篇: Python知识架构图
47865
46431
37316
34764
29334
25994
24948
19969
19566
18053
5808°
6435°
5951°
5977°
7082°
5927°
5966°
6458°
6423°
7802°