Тогда возникает проблема, как перехватить вывод размером больше, чем около 20 КБ ... при входе в файл я получаю все выходные данные, но я хочу сохранить только выборочный вывод, а не весь сеанс. При использовании child.after выходные данные обрезаются, например, отсутствует начало, которое можно немного смягчить, увеличив максимальный размер, но оно все равно разлетается при достижении 30-40 КБ выходных данных.
Для тех, кто интересуется, я собираю выходные данные коммутаторов Cisco с помощью «sh int | i protocol | Last», это возвращает только 3 строки на интерфейс, но некоторые из стеков коммутаторов моего клиента имеют 450 портов.
Не уверен, что динамика здесь, но для некоторых переключателей это удается.
Некоторое время я пытался обойти эту проблему, выборочно включая и отключая ведение журнала в файл. Это оказалось ненадежным, и из общего ведения журнала я вижу, что pexpect сопоставляет выходной путь до того, как ведение журнала его увидит. Я закончил тем, что отключил регистрацию, в то время как данные все еще записывались в файл. усечение вывода после примерно 10 строк вывода.
Таким образом, остается главный вопрос: как повысить надежность ребенка? Для того, чтобы захватить большие выходы. У меня нет проблем с увеличением времени ожидания ожидаемых заявлений, если выходные данные надежны. То, что я вижу сейчас, - это не тайм-аут с неполным выводом.
child.sendline(action)
child.expect(prompt_keys)
action_output = str(child.after) # Captures the output
# print action_output # Uncomment for debugging grabbed output
output_file.write(action_output + "\n\n\n") # Write the output to file