我已经编写了一个用于在三部电话之间进行会议的代码,现在我正在尝试调用一个方法名称confList,它将显示会议中所有电话的列表,但缓冲区值应该是最后一个的输出命令即将到来,它没有被执行。
我的confList方法是
if {[execCmd -cmd "xCommand Experimental Conference ParticipantList Search CallId: $x" -expectingValue OK -waitTime 15 -buffersize 10000]} {
OutputInfo error 1 1 0 "[subst $_procInfo] Error in finding the conference Participant List ."
puts "Now my updated budffer is <<<<<< $buffer >>>>>>>>>"
}
以同样的方式,当我试图在最后一个法规上方执行另一个命令时 像这样
if {[execCmd -cmd "xstatus call status" -expectingValue OK -waitTime 5]} {
puts "the Buffer value after executing the command is something like this>>>>>>>>>>>>>>>>>>$buffer<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\n"
}
然后它给出了预期的行为,但是当我尝试从CLI执行它时,它给出正确的输出并且行为是正确的。
值X
正确到达。
请帮帮我。
答案 0 :(得分:0)
如果puts语句根本不运行,则条件不会评估为true。在这种情况下,请执行“[exec Cmd ...”以查看返回的内容。如果puts运行且缓冲区字符串为空,那么您可能正在运行异步命令,并且需要弄清楚如何在完成后运行回调过程,或者定期检查缓冲区响应的循环。
以下是如何检查异步proc的示例。
#!/usr/bin/tclsh
set buffer ""
set count 0
proc async_call {} {
global buffer
set buffer "Hello World"
}
proc buffer_check {} {
global buffer
global count
# keep count of buffer checks
puts [incr count]
if {$buffer == ""} {
# buffer is empty.
# try again in 1 second.
after 1000 buffer_check
return
}
puts $buffer
# exit program
exit
}
# run async_call after 3 seconds
after 3000 async_call
# run the buffer_check
after 1000 buffer_check
# keep program running
vwait forever
输出:
./test.tcl
1
2
3
Hello World