0

我正在执行以下脚本:

#!/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 脚本中得到这个?

4

1 回答 1

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,如果找到,我们提取第一个数字并对其进行一些有用的操作。
于 2013-04-09T23:55:43.223 回答