如何使用Python的Pexpect复制Expect的$ expect_out(1,string)?

时间:2017-12-01 09:54:54

标签: python tcl expect pexpect

当我在Cisco交换机上运行'show version'时,我得到以下输出:

Cisco IOS软件,C3750E软件(C3750E-UNIVERSALK9-M),版本12.2(58)SE2,RELEASE SOFTWARE(fc1) 技术支持:http://www.cisco.com/techsupport 版权所有(c)1986-2011,Cisco Systems,Inc。

< - 输出截断 - >

我使用Expect登录交换机,运行show version命令,并期望该命令的完整输出和确切的版本,然后我可以使用以下代码输出到屏幕:

send "show version\n"
expect -re "show version.*Version (.*), REL.*#$"
send_user "Command Output:\n$expect_out(0,string)\n\n"
send_user "Version:\n$expect_out(1,string)\n\n"

这一切都运行正常,但我现在正尝试使用Python和Pexpect复制它。我可以使用child.before:

获得$ expect_out(0,string)的等价物
child.sendline(show version')
child.expect('#')
print("\r\n","Command Output:","\r\n",child.before, sep = '')

如何在Pexpect中复制$ expect_out(1,string)以获取确切的版本?

非常感谢提前

1 个答案:

答案 0 :(得分:0)

Pexpect软件包的确比Expect小,而且这是一个非常不同的领域,因为没有对相关匹配对象的公开访问。

您需要use a separate RE来提取您关心的部分。

import re

child.sendline(show version')
child.expect('#')
print("\r\n","Command Output:","\r\n",child.before, sep = '')

m = re.search("show version.*Version (.*), REL.", child.before)
if m:
    print("Version:\n" + m.group(1) + "\n\n")