После использования команды send
, вам нужно использовать expect
команду, чтобы получить все выходные что-то показать команду, как,
#This is a common approach for few known prompts
#If your device's prompt is missing here, then you can add the same.
set prompt "#|>|:|\\\$"; # We escaped the `$` symbol with backslash to match literal '$'
#Your code to telnet to the device here...
# This is to clean up the previous expect_out(buffer) content
# So that, we can get the exact output what we need.
expect *;
send "show interface status\r"; # '\r' used here to type 'return' .i.e new line
expect -re $prompt; # Matching the prompt with regexp
#Now, the content of 'expect_out(buffer)' has what we need
set output $expect_out(buffer);
set interfaces [ split $output \n ]; # Getting each interfaces info in a list.
Вы можете посмотреть here, чтобы узнать больше о том, зачем вам нужно expect *
.
Update:
По умолчанию предел размера буфера expect
«s достаточно, чтобы гарантировать, что шаблоны могут соответствовать до последних 2000 байт вывода. Это всего лишь количество символов, которые могут поместиться на 25-строчный столбец 80 столбцов. (i.e.25 * 80 = 2000)
Максимальный размер совпадений, который expect
гарантирует, что он может быть выполнен с помощью команды match_max
. В качестве примера следующая команда гарантирует, что expect
может соответствовать выходу программы до 10000 символов.
match_max 10000
На рисунке дано match_max
не максимальное число символов, которые могут совпадать. Скорее всего, это минимальное количество символов, которые можно сопоставить. Или иначе, можно сопоставить больше, чем текущее значение, но более крупные совпадения не гарантируются. Без аргументов match_max
возвращает значение для текущего процесса.
%
% package require Expect
5.43.2
% match_max
2000
% match_max 10000
% match_max
10000
%
Установка размера буфера достаточно большой может замедлить ваш сценарий, но только если вы позволите входной идти неудовлетворенным. По мере поступления символов шаблонный шаблон должен повторять шаблоны последовательно на более длинные и более длинные объемы ввода. Поэтому неплохо сохранить размер буфера не больше, чем вам действительно нужно.
Это отлично работает, но кажется, что $ expect_out (buffer) недостаточно велик для хранения вывода. Регулируется ли размер буфера? Например, если вы хотите «cat» файл, а затем проанализировать вывод с помощью TcL? – Cory