2016-09-08 4 views
0

Я новичок в Expect и Tcl. Я пишу код, используя ожидать в Tcl, чтобы соответствовать шаблону в одиночку (т.е. без картины будучи подстрока в данной строке) .Code приводится ниже:Ожидание соответствия шаблону Tcl

package require Expect 
expect "^hi$" { send "pattern matched" }; # hi is the pattern to be matched 

Но код не обнаруживает привет. Если код изменен, как показано ниже это работает, когда образец приходит в первой части строки

package require Expect 
expect "^hi" { send "pattern matched" } 

Если код изменен, как показано ниже, она не работает, несмотря на то, что, как ожидается, чтобы соответствовать образцу в конец строки

package require Expect 
expect "hi$" { send "pattern matched" } 

Я делаю что-то неправильно? Пожалуйста, помогите

ответ

0

Это действительно немного загадочно.

$ - конец строкового якоря, и похоже, что конец линии захватывается до конца строки. Имея это в виду, вы можете сделать это с:

expect "Hi\n$" { puts "Wow" } 

Имейте в виду, что \n работает на Linux, но, возможно, не на других типах консоли!

+0

Вам может понадобиться, чтобы соответствовать окончаний строк дос-стиль: 'ожидать -re "hi \ r? \ n" ' –

+0

@Kiaus Его работа с вашим предложением, но для всех вышеперечисленных кодов, то есть с помощью^и \ n, если строка" hi "не указана как первый вход, она не обнаружить, то есть, если мы вводим ввод в порядке «abcd», «hi» он не обнаруживает ... Я запускаю код в tclsh, используя командную строку в Windows OS – joe

+0

@Glenn Это не сработало .... I нужен код для определения строки «привет», только когда он вводится один, т. е. не для строк «hiabc» или abchidef »или« abchi ».... Что-то вроде«^hi $ »в Tcl – joe

0

Есть несколько вещей, которые могут пойти не так, но вариант, скорее всего, состоит в том, что после текста, который вы ожидаете, есть какие-то дополнительные пробелы; Expect видит всех персонажей, а не только печатных. Это может быть пространство, это может быть новая черта. Если вы знаете, что это такое, добавьте это в то, что вы ожидаете. В противном случае вам потребуется более сложное регулярное выражение:

# RE in braces because of the backslash; \s matches *ALL* types of whitespace 
expect {^hi\s*$} 
send "found it!" 

Другой вариант - переключить режимы соответствия RE. Ожидать работает в режиме полного буфера по умолчанию (это единственный разумный вариант в самых сложных ситуациях), но вы можете поместить его в линию, ориентированных на:

# The ‘n’ is mnemonically for Newline-aware 
expect {(?n)^hi$} 
send "found it!" 
+0

Это не сработало – joe

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

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