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)