我有一个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)
shell的实际输出:
Savari>> show rsu-set all
Mode = master
SnmpSlaveIPAddress = 192.168.20.204
SnmpSlaveIPAddress = 192.168.20.210
此处,在配置新ip
之前,我尝试删除旧版ip
。所以我尝试匹配IP地址,然后向delete
ip
发送指令。
所以我希望ip
使用"[sS]nmp.*[ ]*=[ ]*[0-9].*[0-9]"
,然后使用ip
方法提取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时才会发生这种情况。
请帮我解决这个问题。
提前致谢
答案 0 :(得分:2)
当你的期望'它只匹配一个地址:
SnmpSlaveIPAddress = 192.168.20.204
但是如果有更多的地址,它会比你真正想要的更多,比如:
SnmpSlaveIPAddress = 192.168.20.204
SnmpSlaveIPAddress =
所以,你的'old_slave_ip'得到地址,加上你不想要的部分。 为了摆脱这种情况,我会尝试:
old_slave_ip = master.match.group().split("=")[1].split('\n')[0]
也就是说,只有在预期的第一线上发生了什么。它应该适用于两种情况(只有一个地址,等等)