在下面的程序中,我想在第二个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)
}
答案 0 :(得分:3)
使用open
命令的“管道”语法。像这样:open "|ping 30.1.1.2" r
。唯一(次要)问题是您需要关闭从open
命令返回的文件描述符 - 当进程完成时它不会自动关闭。这里有更多示例:Tcl's wiki