catch { exec asdf.exe args }
我传递给exec命令的名称的可执行文件会导致未处理的异常 catch {exec ...}似乎只捕获非零返回码,而不是例外 处理这个问题的正确方法是什么?
注意我无法访问我正在调用的可执行文件的源代码。
答案 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
仍然包含命令的输出。]
假设您的外部应用程序在异常时打印出合理的内容,您应该能够检查打印的内容并做出相应的反应。