2014-05-20 7 views
0

나는 expect와 send 명령을 동시에 사용하여 2 개의 프로세스를 동시에 생성하려고합니다.Regex와 Tcl에서 다중 프로세스를 기대

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) 

I는 다음과 일치하고 데이터의 내용이없는,

This is sample-2(1), info ACT 

내가 노력하고 있어요 이 경기에서 '2'와 'ACT'값을 가져옵니다.

expectsend에 대해 수행 한 것처럼 특정 스폰 프로세스에 대해 특정 값을 지정해야합니까? 그렇다면 어떻게해야합니까?

감사

+0

일치하는 데이터를 게시 할 수 있습니까? –

+0

일치하는 데이터로 내 질문을 업데이트했습니다. – Dinesh

답변

1

당신의 정규식은 모든 자리 주변의 -2() 일치하려고하지 않습니다. 당신은 아마이 정규식을 일치 수 :

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

[^(]+ 여는 괄호를 제외하고 모든 항목과 일치, \(는 여는 괄호와 \) 닫는 괄호와 일치하는 것입니다.