Ожидание: чтение с последней отправки

Я пытаюсь прочитать вывод pexpect.send(cmd), но вот проблема, с которой я столкнулся.

Я отправляю много команд в последовательности, и я хочу прочитать/ожидать после определенного набора команд. Условие состоит в том, что следует учитывать только вывод последней команды. Но expect совпадает с последней точкой чтения. Я пробовал разные методы, такие как сопоставление для EOF, перед отправкой команды, вывод которой мне нужен, но EOF означает, что дочерний процесс завершен. Я пробовал читать до истечения времени ожидания, а затем отправлять команду, но само время ожидания приводит к завершению дочернего процесса.

Я искал способы, которыми я мог бы читать с конца или последней строки вывода. Я рассматриваю возможность чтения фиксированных байтов в файл или строку, а затем манипулирую выводом, чтобы получить нужную мне информацию. Здесь также фиксированное количество байтов не является фиксированным. Кажется, нет надежного способа сделать это.

Может ли кто-нибудь помочь мне разобраться в этом?


person Sharad    schedule 26.08.2016    source источник


Ответы (1)


Есть три способа решить эту проблему, но ни один из них не очищает буфер.

  1. В Pexpect каждый вызов send должен сопоставляться с вызовом expect. Это гарантирует, что указатель файла переместился перед предыдущей отправкой.
  2. Если перед одиночным expect стоит ряд send, то нам нужно предоставить способ перемещения указателя файла в место последней отправки. Это можно сделать с помощью дополнительного send, чей вывод expect уникален. Уникальность должна быть такой, чтобы ни один из send в серии send не давал такой результат.
  3. Третий метод — использовать набор logfile_read для файла. Все выходные данные будут записываться в этот файл. Перед send, для которого используется expect, получите позицию указателя файла. Теперь также получите позицию указателя файла после отправки. Поиск ожидаемого шаблона в файле между первым и вторым указателем.

Первый метод является идеальным способом, которым это должно быть сделано.

person Sharad    schedule 31.08.2016