当我在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)以获取确切的版本?
非常感谢提前
答案 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")