0

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

>

oa;05:SYST:APPL? String 2 Sending bss_str: en;05 "CDMA 2000 Lab App T"

「expect_out(buffer)」を読み取れません: 「set receive_buffer $expect_out(buffer)」の実行中にそのような変数はありません (手順「get_bss_parameter_value」の 20 行目)

================================================== ======上記のコードで". " が " " に置き換えられた場合、これが OUTPUT:

文字列 1

>

oa;05:SYST:APPL? 文字列 2 送信 bss_str: en;05 receive_buffer START:

oa;05:SYST:APPL?

終了 現在のアプリケーションは

oa;05:SYST:APPL?

問題:
1) 値 "CDMA 2000 Lab App T" を、expect_out(buffer) 変数で取得できません。これは (.* が原因で) Agilent デバイスからの出力と一致するはずです。コードに何か問題がありますか?
2) どちらの場合も、コマンド「en;05」は送信されますが、stdout には表示されません。最初のケースで期待される出力を確認できますが。

4

2 に答える 2

1

[expect]コマンドは、デフォルトではregexp-styleではなくglob-styleマッチングを行うことに注意してください。だから、あなたが書くところ:

expect .*

実際には、リテラルドットで始まり、その後に任意の数の文字が続く文字列を探しています。これが一致しないため、expect_out配列は設定されません。あなたが言うように

expect *

globパターン「*」は任意の文字列に一致するため、期待どおりに動作します。

本当に「。*」が必要な場合は、指定する必要があります

expect -re .*
set receive_buffer $expect_out(buffer)
于 2009-06-02T18:15:06.903 に答える