Как обрабатывать различные выходные данные внутри ожидаемого блока - PullRequest
0 голосов
/ 26 декабря 2018

Внутри ожидаемого скрипта программа может выдавать различные выходные данные в зависимости от конфигурации системы.Мне нужно обработать вывод внутри ожидаемого блока для различных выходных данных и обеспечить ввод соответственно для продолжения выполнения программы.Есть ли какой-нибудь способ, ожидающий блок может быть записан так, чтобы он мог найти соответствующий шаблон и продолжить, а остальные шаблоны игнорируются?

Sample script 

    spawn myprogram
     expect {
                        -re "pattern1" {send -- "str1 \r"}
                        -re "pattern2" {send -- "str2 \r"}
                        -re "pattern3" {send -- "str3 \r"}
               }

Здесь, в зависимости от шаблона в выходных данных, необходимо выполнить действие.

1 Ответ

0 голосов
/ 26 декабря 2018

Используете ли вы эти двойные черты, чтобы аргумент send интерпретировался как строка?Если это так, я думаю, вам нужны пробелы после -- и перед строкой:

expect {
                -re "pattern1" {send -- "str1 \r"}
                -re "pattern2" {send -- "str2 \r"}
                -re "pattern3" {send -- "str3 \r"}
       }

без пробела, который, по-видимому, хочет обрабатывать все после первой - как один большой флаг.

Чтобы ответить на ваш вопрос, да, похоже, что работающая отправная точка делает то, о чем вы просите: она будет наблюдать вывод из testscript и ждать, пока совпадет одно из регулярных выражений, или пока не истечет время ожидания.истекает (поскольку вы не устанавливаете период ожидания, по умолчанию он будет равен 10 секундам) или пока не будет получен EOF.Если одно из регулярных выражений совпадает, оно перейдет в раздел кода, который следует за соответствующим выражением.

Будьте осторожны с синтаксисом регулярных выражений TCL, если вы привыкли к PCRE или Vim ...

...