pexpect match问题

2024-06-28 10:51:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个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时才会发生这种情况。在

请帮我弄清楚。在

提前谢谢


Tags: ipmasterconfigstatusshowalldeleteold
1条回答
网友
1楼 · 发布于 2024-06-28 10:51:03

当你的“expect”只匹配一个地址时,它会得到如下信息:

SnmpSlaveIPAddress  = 192.168.20.204

但如果有更多的地址,它能捕捉到比你真正想要的更多的地址,比如:

^{pr2}$

所以,你的“老奴”会得到地址,加上你不想要的部分。 为了摆脱这种情况,我会尝试:

^{3}$

也就是说,只有在第一行的东西被expect捕捉到了。它应该在两种情况下都有效(只有一个地址,以及更多地址)

相关问题 更多 >