Tcl 为什么字符串匹配在该“中失败”;期望;密码?

Tcl 为什么字符串匹配在该“中失败”;期望;密码?,tcl,expect,Tcl,Expect,为了与安捷伦基站模拟器配合使用,我创建了以下程序: 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

为了与安捷伦基站模拟器配合使用,我创建了以下程序:

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:SYST:APPL? 字符串2 发送bss_str:en;05 “CDMA 2000实验室应用程序T”

无法读取“expect_out(buffer)”:没有此类变量 执行时 “设置接收缓冲区$expect\u out(缓冲区)” (步骤“获取bss参数值”第20行)

======================================================== 如果上述代码中的“”替换为“”,则这是输出:

字符串1

>

骨性关节炎;05:SYST:APPL? 字符串2 发送bss_str:en;05 接收缓冲区启动:

骨性关节炎;05:SYST:APPL

结束 目前的应用是

骨性关节炎;05:SYST:APPL

问题:
1) 我无法在expect_out(buffer)变量中获得值“CDMA 2000 Lab App T”,该值应与安捷伦设备的输出相匹配(由于.*)。代码有问题吗?

2) 在这两种情况下,都会发送命令“en;05”,但不会在标准输出上显示。虽然我们可以在第一种情况下看到预期的输出。

我的印象是,expect\u out变量是一个全局变量。如果我是对的,那么您需要以下内容:

global expect_out
或者,您可以使用名称空间限定符将其显式地称为全局“:”


请注意,[expect]命令在默认情况下不匹配,而不匹配。那么,你在哪里写:

expect .*
实际上,您正在查找一个字符串,该字符串以文字点开头,后跟任意数量的字符。由于无法匹配,expect_out数组不会被填充。如你所说

expect *
由于全局模式“*”与任何字符串匹配,因此其行为与您预期的一致

如果确实需要“*”,则需要指定

expect -re .*
set receive_buffer $expect_out(buffer)
expect -re .*
set receive_buffer $expect_out(buffer)