我有一个python-pexpect
代码片段,如下所示:
while True:
master.sendline("show rsu-set all")
status=master.expect(["[sS]nmp.*[ ]*=[ ]*[0-9].*[0-9]","Savari>>",TIMEOUT,EOF],4)
if status == 0:
old_slave_ip = master.match.group().split("=")[1]
master.sendline("config rsu-set delete "+old_slave_ip)
master.expect("Savari>>")
master.sendline("config rsu-set commit")
master.expect("Savari>>")
continue
elif status == 1:
break
else:
print "Timed out or EOF reached"
exit_flag = 1
exit(1)
外壳的实际输出:
^{pr2}$在这里,在配置新的ip
之前,我试图删除旧的ip
。因此,我尝试匹配ip地址,然后向delete
发送指令ip
。在
所以我希望ip
使用"[sS]nmp.*[ ]*=[ ]*[0-9].*[0-9]"
,然后使用split()
方法提取{
我希望old_slave_ip
值仅为ip
地址。但是它还有下一行的SnmpSlaveIPAddress
,这会导致一些错误行为。在
脚本的输出如下:
Savari>> show rsu-set all
Mode = master
SnmpSlaveIPAddress = 192.168.20.204
SnmpSlaveIPAddress = 192.168.20.210
Savari>> config rsu-set delete 192.168.20.204
Savari>>
Savari>> SnmpSlaveIPAddress
^Command not found
Savari>> config rsu-set commit
Savari>> show rsu-set all
Mode = master
SnmpSlaveIPAddress = 192.168.20.210
Savari>> config rsu-set delete master
Invalid value
这是一个无限循环。在
当只有一个ip
地址时,脚本可以正常工作。只有当列表中有多个ip时才会发生这种情况。在
请帮我弄清楚。在
提前谢谢
当你的“expect”只匹配一个地址时,它会得到如下信息:
但如果有更多的地址,它能捕捉到比你真正想要的更多的地址,比如:
^{pr2}$所以,你的“老奴”会得到地址,加上你不想要的部分。 为了摆脱这种情况,我会尝试:
^{3}$也就是说,只有在第一行的东西被expect捕捉到了。它应该在两种情况下都有效(只有一个地址,以及更多地址)
相关问题 更多 >
编程相关推荐