Eug*_*sca 3 tcl try-catch exec
我有以下场景:
if { [catch { exec echo calling a BIG script } exec_msg] } {
puts "NOK"
puts "output of the BIG script: $exec_msg"
} else {
puts "OK"
puts "output of the BIG script: $exec_msg"
}
Run Code Online (Sandbox Code Playgroud)
是否有任何解决方案可以实时打印 $exec_msg ,与 BIG 脚本的执行同步?
如果你这样做:
exec echo calling a BIG script >@stdout
# Everything wrapped around the exec is the same; I omit it for brevity
Run Code Online (Sandbox Code Playgroud)
然后脚本的输出将直接写入标准输出。但是,您将无法从 Tcl 脚本中读取它。要从脚本中读取它,您可以尝试(在 Unix 上):
exec echo calling a BIG script | tee /dev/tty
Run Code Online (Sandbox Code Playgroud)
然而,这往往会延迟输出,直到一次累积几千字节(大多数程序如何输出到非终端的一个功能)。解决这个问题需要使用 Expect,这要复杂得多,或者可能创建一个管道并异步处理它。与您一直在做的事情相比,这在技巧上迈出了实质性的一步,这是因为您开始与程序的自然工作方式作斗争。坦率地说,如果你并不真正需要它,你最好避免这种事情。