[期待] spawn id exp7未打开

时间:2015-10-29 11:55:01

标签: tcl expect spawn

我试图让我的期望脚本读取文件,为文件的每一行运行命令并退出保存日志。代码如下:

#!/usr/bin/expect -f
set user [lrange $argv 0 0]
set password [lrange $argv 1 1] 
set ipaddr [lrange $argv 2 2]   
set arg1 [lrange $argv 3 3]
set systemTime [clock seconds]
set time [clock format $systemTime -format %a_%b_%d_%Y@%H'%M'%S]
set fp [open "$arg1" r]
set a "ssh-"
set b ".txt"
set s "_"
append newfile "${a}${arg1}${s}${time}${b}"
set timeout -1

spawn ssh $user@$ipaddr
match_max 100000
expect "*?assword:*"
send -- "$password\r"
log_file "$newfile" ;
expect "*#"
send_user "This is the $argv0 Script\r"
while {[gets $fp line] != -1} {
    send -- "scm $line\r"
    expect "*#"
}
close
send -- "exit\r"
expect eof

我的问题是,一旦到达文件末尾,我会收到以下错误:

E6000_Lab_1# send: spawn id exp7 not open
    while executing
"send -- "exit\r""
    (file "filetest.tcl" line 28)

有人可以帮我摆脱这个错误吗?

2 个答案:

答案 0 :(得分:1)

很抱歉这样做,但似乎我再次得到了asnwer。

非常感谢所有回答并为解决这些问题提供一些想法的人。

我的问题的解决方案是在已打开的文件的ID上。一旦我关闭它,我的代码停止崩溃,snipet在下面:

while {[gets $fp line] != -1} {
    send -- "scm $line\r"
    expect "*#"
}
close $fp
send "ping xxx.xxx.xxx.xxx timeout 1 repeat-count 100\r"
expect "# "
send -- "exit\r"
expect eof

正如您所看到的,“close”参数之后的“$ fp”允许我将下一个命令发送出循环而没有错误。

答案 1 :(得分:0)

send与子流程的连接后,您无法执行expectclose