繁体   English   中英

pexpect 匹配问题

[英]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 地址,然后发送指令来deleteip

因此,我期望的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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM