Expect: catch exit status
From FVue
Contents
Problem
How can I – within expect – catch the exit status of an executed process?
Solution 1: spawn, close, wait
If the process was executed using spawn, call exp_wait after exp_close:
exp_close
exp_wait
# Or example use in DejaGnu:
eval exp_spawn $cmd
set ret [exp_wait]
set pid [lindex $ret 0]
set spawn_id [lindex $ret 1]
set os_error [lindex $ret 2]
set exit_status [lindex $ret 3]
Solution 2: exec, catch
If the process was executed using exec, use catch to investigate any error code.
expect1.1> catch [exec false] results
child process exited abnormally
while executing
"exec false"
expect1.2> echo $errorCode
CHILDSTATUS 9551 1
expect1.3>
Or as tcl:
set status 0
# $results contains error messages
if {[catch [exec false] results]} {
if {[lindex $::errorCode 0] eq "CHILDSTATUS"} {
set status [lindex $::errorCode 2]
}
}
Journal
20060213
Visited ActiveTcl - Online Docs : Tutorial
20071019
- Re: spawn and redirect stderr
- Forum question with 3-solution answer
Advertisement