我正在执行以下脚本:
#!/usr/bin/expect -f
#!usr/bin/expect
package require Expect
spawn telnet $serverName $portNum
expect "TradeAggregator>"
send "Clients\r"
expect "Client:"
send "1\r"
expect "1-Client>"
send "Pollers\r"
expect "Client Pollers"
send "2\r"
执行这些行后:
send "Pollers\r"
expect ">"
我在CMD输出中获得以下线:
"Client" Pollers
1) "ICTS_ICEFIX_Worker Worker" (ICTS_ICEFIX_Worker Poller): RUNNING
2) "NYMEX UTBAPI Worker" (NYMEX UTBAPI Poller): STOPPED
所以在这里,我想将上面的输出存储在一个变量中。然后我想逐行读取它,如果任何行包含NYMEX
字,那么我需要获取第一个数字(1),例如。)并执行一些子字符串方法来剪切刺痛。
如何在tcl脚本中获取此内容?
答案 0 :(得分:1)
这是一个解决方案:
# After you send "2\r":
expect * ;# Do this to get data in expect_out
foreach line [split $expect_out(buffer) \n] {
if {[string match *NYMEX* $line]} {
set number [scan $line "%d"] ;# Do something with that number
}
}
send "2\r"
之后,我们需要将输出捕获到变量中。幸运的是, Expect 提供了内置的expect_out
变量。我们所需要的只是发出expect *
命令foreach
循环将输出拆分为行,并查找 NYMEX ,如果找到,我们会提取第一个数字并对其执行一些有用的操作。