Как указали Ханс Пассант и Шленк, вы не можете поймать исключение из внешнего приложения.
Как вы уже заметили, 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;
}
[NB: Кстати, если командаreturn 0
, $err_msg
по-прежнему содержит выходные данные команды.]
Предполагая, что ваше внешнее приложение печатает что-то разумное при исключении, вы должны быть в состоянии проверить, что печатается, и реагировать соответствующим образом.