通过tclsh启动tcl脚本并希望解释器

时间:2018-01-08 15:22:05

标签: tcl

我编写了一个Tcl脚本来远程登录Linux服务器并在其中执行一些操作。

我发送一些命令和expect *(期望在缓冲区中捕获所有内容)。

现在我将$expect_out(buffer)打印在一个文件中。

注意:我发送到linux服务器的命令在Linux中调用某种应用程序(如top命令),但是如果执行任何次数,该命令的输出总是相同的。

  1. 双击脚本文件或wish script.tcl(使用愿望解释器)

    完成执行后,我打开文件并检查其内容。它具有先前期望的内容,即脚本中expect *之前的预期值,以及此期望的某些部分(expect *)。所以文件内容最后会遗漏一些文字。

  2. 从命令提示符运行脚本(使用tclsh解释器)

    #> tclsh script.tcl
    

    完成执行后,我打开文件并检查其内容。它具有先前期望的内容,即脚本中expect *之前的预期,以及期望的所有部分(expect *)。

  3. 在上述情况下,如果将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”之前就结束了。

0 个答案:

没有答案