Почему в этом «ожидаемом» коде не совпадает строка? - PullRequest
0 голосов
/ 06 мая 2009

Я создал следующую процедуру для работы с симулятором базовой станции Agilent:

proc get_bss_parameter_value {bss parameter_string} {
global bss_array

set bss_str "$parameter_string?"

puts "String 1"
set bss_str "oa;$bss_array(gpib):$bss_str\r"
send "$bss_str"
expect {nopattern^}

puts "String 2"
set bss_str "en;$bss_array(gpib)"
puts "Sending bss_str: $bss_str"
send "$bss_str\r"
expect .*

set receive_buffer $expect_out(buffer)
puts "receive_buffer START: $receive_buffer"
puts "END"

return $receive_buffer
}

=============================================== ========= ВЫХОД:

Строка 1

>

оа; 05: СИС: APPL? Строка 2 Отправка bss_str: en; 05 "CDMA 2000 Lab App T"

не может прочитать «Ожидаемо (буфер)»: такой переменной нет во время выполнения msgstr "установить receive_buffer $ wait_out (buffer)" (процедура "get_bss_parameter_value" строка 20)

=============================================== ========= Если «. » заменяется на «» в вышеприведенном коде, это ВЫХОД:

Строка 1

>

оа; 05: СИС: APPL? Строка 2 Отправка bss_str: en; 05 START:

receive_buffer

оа; 05: СИС: APPL

END Текущее приложение

оа; 05: СИС: APPL

Проблема:
1) Я не могу получить значение «CDMA 2000 Lab App T» в переменной hope_out (buffer), которая должна соответствовать (из-за. *) Выводу устройства Agilent. Что-то не так с кодом?
2) В обоих случаях команда "en; 05" отправляется, но не отображается в stdout. Хотя мы можем увидеть ожидаемый результат в первом случае.

Ответы [ 2 ]

1 голос
/ 02 июня 2009

Обратите внимание, что по умолчанию команда [well] выполняет поиск в стиле glob , а не стиль регулярного выражения . Итак, где вы пишете:

expect .*

вы на самом деле ищете строку, начинающуюся с буквальной точки, за которой следует любое количество символов. Так как это не совпадает, массив wait_out не заполняется. Как вы упоминаете

expect *

ведет себя так, как вы ожидаете, потому что шаблон глобуса "*" соответствует любой строке.

Если вы действительно хотите ". *", Тогда вам нужно указать

expect -re .*
set receive_buffer $expect_out(buffer)
0 голосов
/ 07 мая 2009

У меня сложилось впечатление, что переменная hope_out является глобальной. Если я прав, то вам понадобится следующее:

global expect_out

Или вы можете явно ссылаться на него как на глобальный, используя квалификатор пространства имен "::"

set receive_buffer $::expect_out(buffer)
...