Diff tcl:从“捕获输出”;执行差异”;它返回非零

Diff tcl:从“捕获输出”;执行差异”;它返回非零,diff,exec,tcl,try-catch,Diff,Exec,Tcl,Try Catch,我知道在执行可能返回非零的命令时使用catch是很常见的。。。但在这种情况下,我如何获得输出 具体来说,我希望做一些类似于“catch{exec diff fileA fileB}ret”的事情。文件不同,ret值为1。我真正需要的是差异的输出,详细的差异。但我相信“catch{exec…}err”实践并没有提供它,对吗 有人能就这项任务提出建议吗?是否有tcl内置命令来执行文件差异?(我认为可以将输出重定向到一个文件,然后读取该文件……还有其他选择吗?) 谢谢!XM来自最近的矿山项目: set

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

具体来说,我希望做一些类似于“catch{exec diff fileA fileB}ret”的事情。文件不同,ret值为1。我真正需要的是差异的输出,详细的差异。但我相信“catch{exec…}err”实践并没有提供它,对吗

有人能就这项任务提出建议吗?是否有tcl内置命令来执行文件差异?(我认为可以将输出重定向到一个文件,然后读取该文件……还有其他选择吗?)


谢谢!XM

来自最近的矿山项目:

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输出的末尾,我得到了“子进程异常退出”。在我的情况下,我没有删除它,但应该很容易做到。

PS:如果没有对“exec”使用“catch”,它会在执行后返回“子进程异常退出”,这会阻止程序继续,这就是为什么我“必须”使用catch,但是如果您能够删除它,这将是伟大的和可接受的。我认为“规范”的使用与Excel的catch在这里:KBK的贡献,我已经阅读Wik.TCL.TK,并添加到我最喜欢的列表。谢谢你,格伦!谢谢你,安德鲁。。。我做的和你的差不多,但我没有仔细检查$result;它有我所需要的:)顺便说一下,您的代码将得到类似“result:cannotexecute”的diff-rwsq fileA.tcl fileB.tcl,因此我使用了命令[catch{exec sh-c$cmd}result],而“cannotexecute”已经不存在了。谢谢!