Python: 在Pexpect模块中模拟re.findall

0 投票
1 回答
586 浏览
提问于 2025-04-16 01:19

可以在pexpect模块中模拟re.findall吗?

我现在有一个脚本,它使用pexpect通过ssh连接到一个服务器。然后我让它向服务器发送一个命令,这个命令会返回很多行内容,这些内容保存在p.before里(p是一个pexpect的实例):

JUNK JUNK JUNK IP ADDRESS 10.0.0.1 JUNK JUNK
JUNK IP ADDRESS 10.0.0.3 JUNK JUNK JUNK
JUNK JUNK JUNK
IP ADDRESS 10.0.0.2 JUNK JUNK JUNK JUNK

注意:我在这个例子中使用的IP地址是随机的,只是为了说明。在实际的脚本中,可以是任何IP地址。我想要找到的信息就是这些IP地址。

pexpect能做类似re.findall的事情吗?还是说我必须用re.findall(regex, p.before)来实现?

1 个回答

0

我觉得你可以通过创建一个新的类来实现你想要的功能,这个新类是基于searcher_re的。然后,你可以使用一个叫expect_loop的调用,传入你新建的类的实例,并且重写search方法。

在你重写的方法里,在进行主要的搜索之前,你可以在缓冲区中查找一个能识别IP的正则表达式,并把找到的结果存储在你自己定义的一个变量里。这样,当pexpect.expect_loop返回时,你的实例变量就会包含你想要的“额外信息”。

看起来你可能需要一点试验和调整才能搞定这个,另外我不太明白你期待通过这种方法(或者其他类似的方式)能比你提到的简单方法有什么优势,也就是直接使用re.findall,而不去碰pexpect的内部机制——你能解释一下吗…?

撰写回答