Могу ли я поймать «необработанное исключение win32», вызванное исполняемым файлом, который я вызываю из сценария TCL? - PullRequest
0 голосов
/ 29 декабря 2011
catch { exec asdf.exe args }

Исполняемый файл, имя которого я передаю команде exec, вызывает необработанное исключение.
catch {exec ...}, похоже, только перехватывает ненулевые коды возврата, но не исключения.
Что такоеправильный способ справиться с этим?

Примечание. У меня нет доступа к исходному коду исполняемого файла, который я вызываю.

1 Ответ

0 голосов
/ 29 марта 2012

Как указали Ханс Пассант и Шленк, вы не можете поймать исключение из внешнего приложения.

Как вы уже заметили, 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 по-прежнему содержит выходные данные команды.]

Предполагая, что ваше внешнее приложение печатает что-то разумное при исключении, вы должны быть в состоянии проверить, что печатается, и реагировать соответствующим образом.

...