2010-01-16 1 views
3

Я нахожусь на полпути, написав сценарий Expect на сервере Linux, который должен подключиться к маршрутизатору telnet, чтобы собрать некоторую системную информацию. Пока мой скрипт может успешно выполнить соединение, запустить команду маршрутизатора, отключить и завершить работу.Как сохранить и проанализировать вывод команды в Expect?

Команда отображает несколько строк, которые мне нужно разобрать, что-то я не уверен, как это сделать в ожидании. Как я могу сохранить вывод, grep строку, затем столбец из строки и, наконец, сохранить результат в файле? Если возможно, я бы хотел использовать Expect полностью, а не работать (например, Expect embedded в Bash).

Спасибо за ваше время. jk04

+0

Можете ли вы показать нам примерный выход? –

+0

http://meta.stackexchange.com/questions/4481/apply-markup-code-in-comments –

ответ

6

в основном, $ expect_out (буфер) [1]. содержит результат последнего совпадения ожиданий с текущим. вы можете найти там свою команду.

и для манипуляции с строками вы можете просто использовать встроенный tcl [2] [3].

  1. "Как получить доступ к результату удаленной команды в Ожидать" http://wiki.tcl.tk/2958
  2. "регулярное выражение" http://wiki.tcl.tk/986
  3. "строка матч" http://wiki.tcl.tk/4385
+0

Я думаю, что $ expect_out (buffer) содержит только текст, соответствующий вашему шаблону, а не весь текст из последнего ожидаемого совпадения с текущий. –

+0

Я думаю, что нет, вы можете проверить обсуждение «expect_out (buffer) имеет содержимое предыдущей отправки», http://wiki.tcl.tk/17378 –

+0

Должен ли я сказать «да»? так как текст, сопоставляемый текущим шаблоном, является результатом последнего ожидаемого текущего: –

6

Два советы для ожидать развития:

  • autoexpect выложить рамки для вашей автоматизации
  • exp_internal 1, чтобы показать вербально, что ожидание делает изнутри. Это необходимо, когда вы не можете понять, почему ваше регулярное выражение не захватывает то, что вы ожидаете.
+1

** exp_internal 1 ** aversome! – gavenkoa

3

Я столкнулся и решил аналогичную проблему для взаимодействия с bash. Я считаю, что этот подход обобщается на любую другую интерактивную среду, которая обеспечивает вывод no-op, fixed-string.

В общем, я завершаю команду двумя фиксированными строками, а затем выполняю поиск шаблона, который включает эти строки в начале и конце, и сохраняет содержимое между ними. Например:

set var ""; 
expect $prompt { send "echo PSTART; $command; echo PEND;\r"; } 
expect { 
    -re PSTART\r\n(.*)PEND\r\n$prompt { set var [ string trim $expect_out(1,string) ]; send "\r"; } 
    -re $prompt { set var "" ; send "\r"; } 
    timeout { send_user "TIMEOUT\n"; exit } 
} 

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

Затем вы можете делать все, что вам нужно, с содержанием «var».

 Смежные вопросы

  • Нет связанных вопросов^_^