如何检查Tcl命令没有';t抛出异常或错误?
我有以下程序:如何检查Tcl命令没有';t抛出异常或错误?,tcl,Tcl,我有以下程序: proc myexec { args } { info_msg "Executing shell command: $args" set catch_res [catch {eval exec $args} res] if { $catch_res != 0 } { error_msg "Failed in command: $args" error_msg "$res" } return $catc
proc myexec { args } {
info_msg "Executing shell command: $args"
set catch_res [catch {eval exec $args} res]
if { $catch_res != 0 } {
error_msg "Failed in command: $args"
error_msg "$res"
}
return $catch_res
}
它只检查Unix命令,不适用于Tcl命令。
如何更改此过程以使其与Tcl命令一起工作
例如,如果要检查以下命令的计算结果是否正确:
set object1 $object2
或
如果您只想修改此过程,使其运行作为Tcl命令而不是Unix命令传递的参数,只需删除exec,即,不必执行
eval exec$args
,只需执行eval$args
让一个过程同时处理Tcl和Unix命令比较困难,但Tcl已经为您在tclsh或wish中键入的命令执行了这一操作—它首先查找内置命令,如果找不到,则尝试将其作为Unix命令运行。您可以在脚本中通过执行
set::tcl_interactive 1
-有关详细信息,请参见最简单的方法是:
proc myeval { args } {
info_msg "Executing Tcl command: $args"
set catch_res [catch $args res]
if { $catch_res != 0 } {
error_msg "Failed in command: $args"
error_msg "$res"
}
return $res
}
这里,我们用catch$args res
替换了catch{eval exec$args}res
(加上一些修饰性的东西),这将导致参数作为脚本计算,而无需进一步替换。您可以这样使用它:
myeval foo bar $boo
myeval {
foo bar $boo
}
或者,如果您也在catch
中进行替换,那么最好编写这个更复杂的版本:
proc myeval { script } {
info_msg "Executing Tcl command: [string trim $script]"
set catch_res [catch [list uplevel 1 $script] res]
if { $catch_res != 0 } {
error_msg "Failed in command: [string trim $script]"
error_msg "$res"
}
return $res
}
在这种情况下,您可以这样称呼它:
myeval foo bar $boo
myeval {
foo bar $boo
}
注意:我已经试着保持代码的模式与问题中的相同。