How to wait for a process to complete using tcl-expect

可紊 提交于 2019-12-04 03:50:05

Can you elaborate on "still script sending rest of the commands in between the previous process. "

I tried this and it worked.

spawn ssh host1
expect ":"
send pwd1
expect "%"
send "echo hi\r"
expect "%"
send "exit\r"
expect eof
spawn ssh host2    
expect ":"
send pwd2

you're forgetting to "hit enter". After sending exit, the way to wait for the process to end os expect eof:

send "source xyz.csh\r"
expect "%"
send "exit\r"
expect eof

I found this post after I ran into a race condition problem: sometimes the script completed as expected and other times it didn't. Adding a catch statement to the script ensured the desired outcome every time:

[...]
expect eof
catch wait result

Try this construct when command is time consuming:

. . .
send "command\r"

expect {
    timeout {
        puts "Running..."
        exp_continue
    }
    "%PROMPT%" {
        puts "Finished."
    }
}

send "next command\r"
. . .

On timeout you will be continuosly waiting with exp_continue command for %PROMPT%.

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!