Diff tcl:从“捕获输出”;执行差异”;它返回非零
我知道在执行可能返回非零的命令时使用catch是很常见的。。。但在这种情况下,我如何获得输出 具体来说,我希望做一些类似于“catch{exec diff fileA fileB}ret”的事情。文件不同,ret值为1。我真正需要的是差异的输出,详细的差异。但我相信“catch{exec…}err”实践并没有提供它,对吗 有人能就这项任务提出建议吗?是否有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
谢谢!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”已经不存在了。谢谢!