эксперты по expect/Tcl есть?

52 views
Skip to first unread message

VS

unread,
Oct 9, 2008, 8:45:30 PM10/9/08
to
для Subj собственно вопрос - как в теле expect'ового скрипта пропарсить
output команды send?
Если бы удалось его перенаправить в файл, то дальше я бы tcl'овскими
командами вытащил нужную мне строчку, но как это перенаправление
организовать не могу из их манов понять.
Может кто подскажет пока книжка орайлиевская по почте дойдет?

Alexander Gromnitsky

unread,
Oct 10, 2008, 2:15:24 AM10/10/08
to
Командой [log-file] где-то перед [send]?

Из мана expect:

log_file [args] [[-a] file]
If a filename is provided, log_file will record a transcript
of
the session (beginning at that point) in the file. log_file
will
stop recording if no argument is given. Any previous log file
is
closed.

VS

unread,
Oct 10, 2008, 3:05:09 AM10/10/08
to
Alexander Gromnitsky wrote:
> On Oct 10, 3:45 am, VS <v...@yahoo.com> wrote:
>> для Subj собственно вопрос - как в теле expect'ового скрипта пропарсить
>> output команды send?
>> Если бы удалось его перенаправить в файл, то дальше я бы tcl'овскими
>> командами вытащил нужную мне строчку, но как это перенаправление
>> организовать не могу из их манов понять.
>> Может кто подскажет пока книжка орайлиевская по почте дойдет?
>
> Командой [log-file] где-то перед [send]?

Я подумал об этом, но слишком уж в лоб :)
Тем более я не уверен что буфер будет гарантировано сбрасываться в файл.
Хочется конечно передать в поток и оттуда прочитать или на худой конец
использовать tcl-овские функции работы с файлами, где буфер можно
принудительно слить. Собственно вопрос-то и есть - как в tcl передать
некую функцию в поток :)

Alexander Gromnitsky

unread,
Oct 10, 2008, 5:54:15 AM10/10/08
to
On Oct 10, 10:05 am, VS <v_...@yahoo.com> wrote:
> > Командой [log-file] где-то перед [send]?
>
> Я подумал об этом, но слишком уж в лоб :)

Лоб не лоб, зато работает.

> Тем более я не уверен что буфер будет гарантировано сбрасываться в файл.

Буфер чего? Когда вызывается spawn, то как нам говорит man page:

Its stdin, stdout and stderr are connected to Expect, so that they may
be read and written by other Expect commands.

В файл, который Вы укажите в [log-file] будет отправляется содержимое
параметров [send] и результат от программы, которую Вы мучаете
spawn'ом, что, впрочем, и так всем ясно. Откуда появляется отсутствие
гарантий? Думаете, что автор expect -- мошенник? ;)

> Хочется конечно передать в поток и оттуда прочитать или на худой конец
> использовать tcl-овские функции работы с файлами, где буфер можно
> принудительно слить.

Ну так закройте дескриптор лога, открывайте тот файл посредством
[open] и читайте его как хотите командами [gets], [read], и т.п. I'm
sorry, но я не пойму, что не так в таком подходе?

> Собственно вопрос-то и есть - как в tcl передать некую функцию в поток :)

Please define: передать функцию в поток.

Вы о [fileevent]? Хотите to execute a script, который будет парсить
output в момент, когда stdout будет readable?

Alexander Gromnitsky

unread,
Oct 10, 2008, 6:12:37 AM10/10/08
to
On Oct 10, 3:45 am, VS <v...@yahoo.com> wrote:
btw, похожий вопрос:

http://groups.google.com/group/comp.lang.tcl/browse_thread/thread/f5f0509550dd86a4

Sergey Babkin

unread,
Oct 10, 2008, 9:19:56 AM10/10/08
to

В смысле? Команда send шлет текст к управляемому процессу. Текст из
управляемого процесса парсит команда expect. Ей буквально даются образцы,
которые искать, и действия, которые исполнять, когда нашли.

-СБ

VS

unread,
Oct 10, 2008, 10:55:05 AM10/10/08
to

О похоже этот expect_out это то что мне нужно
Спасибо

VS

unread,
Oct 10, 2008, 10:55:14 AM10/10/08
to

Я знаю как работает expect.
Мне нужно опрашивать много процессов, пока не появится с нужным
параметром. В общем понял, всем спасибо.

Reply all
Reply to author
Forward
0 new messages