【发布时间】:2010-08-23 06:36:02
【问题描述】:
我发现 tcl exec 命令首先从标准输出返回字符串,然后是标准错误。例如,我的以下“测试脚本”按此顺序生成消息:
puts "test started"
puts stderr "some non-fatal error goes to stderr"
puts "test passed"
然后我像这样执行脚本:
set ret [ catch { exec sh -c $cmd } msg ]
我从 $msg 得到的是:
test started
test passed
some non-fatal error goes to stderr
这真的让我很难得到正确的结果。
如果可以按顺序从 stdout 和 stderr 获取消息,有人可以告诉我们,并且:
1) 请不要这样重定向,这样确实可以让它们全部按顺序排列:
set ret [ catch {exec $cmd >&log.txt} msg ]
2) 我必须在 my tcl 脚本中调用 that tcl 脚本,对不起
3) 我也不能直接获取 .tcl 测试脚本,因为在两者之间调用了其他脚本,如果我的 tcl 脚本只是获取 那个 tcl 脚本,它将无法工作。
我正在使用 tclsh 8.3
不确定这是否要求太多。我希望有人能解决这个问题。谢谢。
【问题讨论】:
-
见wiki.tcl.tk/stderr了解更多提示。