如何在tcl脚本中的一个字符串数组中存储CMD输出

时间:2013-04-09 15:22:39

标签: cmd tcl

我正在执行以下脚本:

#!/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脚本中获取此内容?

1 个答案:

答案 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 ,如果找到,我们会提取第一个数字并对其执行一些有用的操作。