gpt4 book ai didi

python - 预期匹配问题

转载 作者:太空宇宙 更新时间:2023-11-04 03:14:41 26 4
gpt4 key购买 nike

我有一个类似这样的 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 that ip

所以我期待 ip 使用 "[sS]nmp.*[ ]*=[ ]*[0-9].*[0-9]" 然后使用 split() 方法提取 ip

我原以为 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捕获的内容。它应该适用于两种情况(只有一个地址,以及更多)

关于python - 预期匹配问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36693486/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com