[英]Issue with pexpect match
我有一个像这样的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
s 之前,我试图删除旧ip
s。 所以我试图匹配 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 时才会发生这种情况。
请帮我解决这个问题。
提前致谢
当您的“期望”仅匹配一个地址时,它会得到类似以下内容:
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]
也就是说,只有第一行的内容被expect 捕获。 它应该适用于两种情况(只有一个地址,等等)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.