与pexpect匹配

时间:2016-04-18 12:04:39

标签: python pexpect

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

请帮我解决这个问题。

提前致谢

1 个答案:

答案 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]

也就是说,只有在预期的第一线上发生了什么。它应该适用于两种情况(只有一个地址,等等)