如何退出TCL proc,而不退出在proc中运行的进程

时间:2014-05-07 11:44:20

标签: tcl expect

在下面的程序中,我想在第二个proc中捕获数据包,而ping在第一个proc中运行。现在如果我执行这个程序,proc正在运行ping并退出。有什么想法来解决这个问题吗?

我的TCL代码:

proc connect {} {
    global spawn_id
    spawn telnet $1.1.1.1
    expect "*ogin:"
    send "admin\r"
    expect "*word:" 
    send "test\r"
    expect "*>"
    send "ping 30.1.1.2\r"  ; # Ping here
    expect "*#"
}

proc pktcap {} {
    spawn telnet $2.2.2.2
    expect "*ogin:"
    send "admin\r"
    expect "*word:" 
    send "test\r"
    expect "*>"
    send "enable\r"
    expect "*#"
    send "service pktcap on interface vlan 2\r"  ; # capture here, see the ICMP packets
    expect "*#"
    set data $expect_out(buffer)
}

1 个答案:

答案 0 :(得分:3)

使用open命令的“管道”语法。像这样:open "|ping 30.1.1.2" r。唯一(次要)问题是您需要关闭从open命令返回的文件描述符 - 当进程完成时它不会自动关闭。这里有更多示例:Tcl's wiki