Python: имитация re.findall в модуле Pexpect - PullRequest
0 голосов
/ 15 июля 2010

Возможно ли смоделировать re.findall в модуле pexpect?

В настоящее время у меня есть скрипт, который подключается по ssh к серверу, используя pexpect. Затем я посылаю команду серверу, который возвращает несколько строк в p.before (p - pexpect spawn):

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 голосов
/ 15 июля 2010

Я думаю, что вы можете взломать то, что ищете, подклассифицировав searcher_re и используя вызов expect_loop с экземпляром вашего подкласса, который переопределяет метод search .

В своем переопределении перед выполнением основного поиска того, что вы сейчас используете, вы можете выполнить поиск в буфере для RE, идентифицирующего IP, и накапливать эти результаты в собственной переменной экземпляра.Таким образом, когда pexpect.expect_loop вернется, эта переменная в вашем экземпляре будет иметь «дополнительную информацию», которую вы ищете.

Похоже, что для правильной работы потребуется немного проб и ошибок, иЯ не понимаю, какие преимущества вы ожидаете (от этого или любого другого взлома с аналогичными целями) по сравнению с простым подходом, который вы упомянули, т. Е. Просто с использованием re.findall напрямую, без вмешательства в аппаратную заботу pexpectобъяснить ...?

...