我编写了一个Tcl脚本来远程登录Linux服务器并在其中执行一些操作。
我发送一些命令和expect *
(期望在缓冲区中捕获所有内容)。
现在我将$expect_out(buffer)
打印在一个文件中。
注意:我发送到linux服务器的命令在Linux中调用某种应用程序(如top
命令),但是如果执行任何次数,该命令的输出总是相同的。
双击脚本文件或wish script.tcl
(使用愿望解释器)
完成执行后,我打开文件并检查其内容。它具有先前期望的内容,即脚本中expect *
之前的预期值,以及此期望的某些部分(expect *
)。所以文件内容最后会遗漏一些文字。
从命令提示符运行脚本(使用tclsh解释器)
#> tclsh script.tcl
完成执行后,我打开文件并检查其内容。它具有先前期望的内容,即脚本中expect *
之前的预期,以及期望的所有部分(expect *
)。
在上述情况下,如果将expect *
替换为某些文字,例如 - > expect "hello"
,然后脚本在愿望解释器中失败并在tclsh解释器中成功。
为什么?我该如何解决?
脚本如下
package require Expect
set DOWN2 \033OB
spawn telnet 172.19.10.10
after 30000
expect "login:"
send "admin\r"
expect "Password:"
after 1000
send "welcome123\r"
after 2000
expect {
timeout { exit 1 }
"MAIN"
}
expect ">"
after 3000
send "mgmt\r"
expect {
timeout { send_user "timed out, Bye "; exit 1 }
"Protocol"
}
#set fp [open textdoc.txt a+]
send "translation\r"
expect "prefix"
send "\r\r"
send "$DOWN2"
send "$DOWN2"
send "$DOWN2"
send "$DOWN2"
send "326"
send "\x16"
expect -re {limit No. : (\d+)}
set lim_val $expect_out(1,string)
set exp_out $expect_out(buffer)
set fp [open textdoc.txt a+]
puts $fp "total buffer is $exp_out"
close $fp
after 2000
exit
此代码在tclsh中成功,并且对于愿望解释器而言失败
在行上失败>> set lim_val $expect_out(1,string)
但是从wireshark捕获,我发现即使从愿望中运行,也会收到“限制号:2”的文本。
如果我尝试在文件中打印$expect_out(buffer)
,
在tclsh中,存储在缓冲区中的内容直到出现“限制编号:2”
在愿望中,存储在缓冲区中的内容甚至在发生文本“限制编号:2”之前就结束了。