Установка флагов глобально в ожидаемых сценариях, таких как nocase - PullRequest
0 голосов
/ 22 января 2019

У меня есть несколько ожидающих сценариев, которые вызывают -nocase -re для каждого экземпляра ожидаемой команды.Например:

expect {
    -nocase "this" { do_this_stuff }
    -nocase "that" { do_that_stuff }
    -nocase "others" { do_other_stuff }
}

Я хотел бы оптимизировать свои сценарии, однажды вызвав параметры глобально.

Я искал страницы man и вики и man страниц для самого Tcl и не нашли ссылки на метод для этого.

Можно ли глобально устанавливать флаги ожидания в начале скрипта, который применяетсяна каждый последующий вызов expect?

Ответы [ 2 ]

0 голосов
/ 22 января 2019

Возможно, лучший способ реализовать предложение mrcalvin:

proc expect_nocase_re {pattern_action_list} {
    # global spawn_id   ;# this _may_ be needed
    set myargs [list]
    for {pattern body} $pattern_action_list {
        lappend myargs -nocase -re $pattern $body
    }
    uplevel 1 expect $myargs
}
# usage
expect_nocase_re {
    this { do_this } 
    that { do_that } 
    other { do_other }
}

Предполагается, что вы передаете список, содержащий только пар шаблон / действие. Не используйте другие параметры expect, такие как -glob, -exact и т. Д. Должно быть нормально передавать список с нечетным номером, где последний элемент - это шаблон без тела действия.

0 голосов
/ 22 января 2019

Возможно, есть способы сделать это, я не разбираюсь в ожиданиях, но вы также можете определить вашу команду expect:

proc my.expect args {
    uplevel [list expect \
         -nocase "this" { do_this_stuff } \
         -nocase "that" { do_that_stuff } \
         -nocase "others" { do_other_stuff } \
         {*}$args]
}

Это предполагает, что вы сознательно используете my.expect в каждом случае.

Вы также можете заменить expect на месте, используя interp hide или явное rename:

interp hide {} expect
proc expect args {
    uplevel [list interp invokehidden {} expect \
         -nocase "this" { do_this_stuff } \
         -nocase "that" { do_that_stuff } \
         -nocase "others" { do_other_stuff } \
         {*}$args]
 }
...