tcl:捕获“exec diff”的输出,返回非零值

时间:2010-07-19 02:57:45

标签: diff exec tcl try-catch

我知道在执行可能返回非零的命令时使用catch很常见......但是在这种情况下如何获得输出?

具体来说,我希望做一些像“catch {exec diff fileA fileB} ret”这样的事情。文件是不同的,ret值是1.我实际需要的是diff的输出,详细的差异。但我相信“赶上{exec ...} err”的做法并没有提供它,对吗?

有人可以就此任务提出建议吗?是否有tcl-builtin命令来做文件差异? (我认为可以将输出重定向到文件,然后读取文件......还有其他替代方案吗?)

谢谢! XM

1 个答案:

答案 0 :(得分:5)

来自我最近的一个项目:

set status [catch {exec diff $file1 $file2} result]
if {$status == 0} {
   puts "$file1 and $file2 are identical"
} elseif {$status == 1} {
   puts "** $file1 and $file2 are different **"
   puts "***************************************************************************"
   puts ""
   puts $result
   puts ""
   puts "***************************************************************************"
} else {
   puts stderr "** diff exited with status $status **"
   puts stderr "***********************************************************************"
   puts stderr $result
   puts stderr "***********************************************************************"
}

底线,当文件不同时,状态为1,$ result保存diff输出。在diff输出结束时,我确实得到了“子进程异常退出”。在我的情况下,我没有删除它,但它应该很容易做到。