0

期待してコマンドを同時に送信することで、同時に2つのプロセスを生成しようとしています。

spawn telnet $IP1 $Cons1
set id1 $spawn_id
set spawns(1) $spawn_id
set logfile($spawn_id) [open "./$IP1-$Cons1-logs.txt" a]

spawn telnet $IP2 $Cons2
set id2 $spawn_id
set spawns(2) $spawn_id
set logfile($spawn_id) [open "./$IP2-$Cons2-logs.txt" a]


trace add variable expect_out(buffer) write log_by_trace
expect -i spawns(1)  "]"
expect -i spawns(2) "]"
send -i spawns(1) "\r\r\r"
send -i spawns(2) "\r\r\r"
expect -i spawns(1) ">"
expect -i spawns(2) ">"
send -i spawns(1) "sometext\r"
expect -i spawns(1) {
         #Here, match itself is not happening. Does it has anything to do with '-i spawn(1)'
        -re {This\s+is\s+sample(\d).*info\s+(\w{3})} {}
        timeout {puts "timeout happened"}
}
#Here, i am getting no such element for the below 2 statements and 
#there is no such output in expect_out(buffer)
puts $expect_out(buffer)
set x $expect_out(1,string)
set y $expect_out(2,string)
puts $x;
puts $y
send -i spawns(2) "sometext\r"
expect -i spawns(2) {
        -re {This\s+is\s+sample(\d).*info\s+(\w{3})} {}
        timeout {puts "timeout happened"}
}
set slot $expect_out(1,string)
set card_state $expect_out(2,string)
 set x $expect_out(1,string)
set y $expect_out(2,string)
puts $x;
puts $y

正規表現の一致を取得できず、コンテンツがありません

put $expect_out(buffer)

私が照合しているデータは次のとおりです。

This is sample-2(1), info ACT

この試合から値「2」と「ACT」を取得しようとしています。

と の場合のように、特定のスポーン プロセスに固有のものを指定する必要がexpectありsendますか? はいの場合、どうすればいいですか?

ありがとう

4

1 に答える 1

1

あなたの正規表現は、数字の前後に一致しよう-2(とはしていません。)おそらく、次の正規表現でそれらを一致させることができます。

This\s+is\s+sample[^(]+\((\d)\).*info\s+(\w{3})

[^(]+は、開き括弧以外に一致します。開き括弧と閉じ括弧\(に一致します。\)

于 2014-05-20T18:03:01.140 に答える