我可以捕获由我从TCL脚本调用的可执行文件引起的“未处理的win32异常”吗?

时间:2011-12-29 12:13:32

标签: exception exec tcl

catch { exec asdf.exe args }

我传递给exec命令的名称的可执行文件会导致未处理的异常 catch {exec ...}似乎只捕获非零返回码,而不是例外 处理这个问题的正确方法是什么?

注意我无法访问我正在调用的可执行文件的源代码。

1 个答案:

答案 0 :(得分:0)

正如Hans Passant和schlenk所指出的,你无法从外部应用程序中捕获异常。

正如您已经观察到的,catch { cmd }只会检查返回代码。

然而,使用catch可以执行的操作是通过执行以下操作捕获变量中的所有输出:

catch {exec asdf.exe args} err_msg

这会将命令的输出设置为变量$err_msg

如果命令返回非零代码,

catch也会方便地返回1,允许您执行以下操作:

if {[catch {exec asdf.exe args} err_msg]} {
    # inspect your output in $err_msg here;
} else {
    # successful execution aftermath here;
}

[注意:顺便说一句,如果命令返回0$err_msg仍然包含命令的输出。]

假设您的外部应用程序在异常时打印出合理的内容,您应该能够检查打印的内容并做出相应的反应。