Re: How to control the loop within expect.
- From: "Hu Junfeng" <hujunfeng@xxxxxxxxx>
- Date: 28 Apr 2006 22:00:18 -0700
Bruce Hartweg 写道:
hujunfeng@xxxxxxxxx wrote:
I just met a problem when I have a loop and an expect in this loop.2 things,
for example
for {set i 1} {i<10} {incr i} {
send a commanda
expect {
1 {puts 1}
2 {puts 2}
3 {........}
}
send a commandb
}
when I get the value 1, I will puts 1 and execute the commandb, so as
2.but my question is if I get the value 3, I want to continue the loop
but not execute send the commandb.
I've used break or exit , these all seemed exit the loop.
Do anybody knows this?
Thanks.
As others have mentioned you can use expect itself as the looping
construct (i.e. if you want to keep doing the same interactions until some
condition of the interaction makes you want to stop. in this case you
just add exp_continue to each branch that doesn't want you to stop.
If the above example is actually what you are wanting (i.e. the loop condition
is *external* to your interaction, and you have other code in your loop
in addition to the expect, you can use the normal tcl continue to stop
the current loop body and continue to the next one
for {set i 1} {i<10} {incr i} {
send a commanda
expect {
1 {puts 1}
2 {puts 2}
3 {
........
continue
}
}
send a commandb
}
Bruce
Thanks, it works:)
But I find another problem with it ,if I put the continue in a
procedure, it will not works again. for example:
proc CMD {con} {
upvar CMDSUCC CMDSUCC
upvar CMDFAIL CMDFAIL
send -i $con "cd /nodes\r"
expect {
-i $con
$CMDSUCC {
puts "succe"
continue
}
$CMDFAIL {
puts "fail"
continue
}
}
puts "123"
}
set i 0
if {$i==0} {
foreach $i {1 2 3 4 5} {
CMD $CLICom
}
} else {
puts "hehe"
}
the result is
invoked "continue" outside of a loop
.
- Follow-Ups:
- Re: How to control the loop within expect.
- From: Gerald W. Lester
- Re: How to control the loop within expect.
- References:
- How to control the loop within expect.
- From: hujunfeng
- Re: How to control the loop within expect.
- From: Bruce Hartweg
- How to control the loop within expect.
- Prev by Date: Re: Tcl/Tk 8.5a4 released
- Next by Date: Re: How to control the loop within expect.
- Previous by thread: Re: How to control the loop within expect.
- Next by thread: Re: How to control the loop within expect.
- Index(es):
Relevant Pages
|