catch { exec asdf.exe args }
execコマンドに渡す名前の実行可能ファイルは、処理されない例外を発生させます。
catch {exec ...}は例外ではなく、ゼロ以外の戻りコードをキャッチするようです。
これを処理する適切な方法は何ですか?TCLスクリプトから呼び出している実行可能ファイルによって "未処理のWin32例外"がキャッチされますか?
注私は呼び出している実行可能ファイルのソースコードにアクセスできませんでした。
catch { exec asdf.exe args }
execコマンドに渡す名前の実行可能ファイルは、処理されない例外を発生させます。
catch {exec ...}は例外ではなく、ゼロ以外の戻りコードをキャッチするようです。
これを処理する適切な方法は何ですか?TCLスクリプトから呼び出している実行可能ファイルによって "未処理のWin32例外"がキャッチされますか?
注私は呼び出している実行可能ファイルのソースコードにアクセスできませんでした。
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;
}
[NB:ちなみに、コマンドは0
を返す必要があり、$err_msg
はまだ含まれていコマンドからの出力]
外部アプリケーションが例外的に何かを賢明に印刷すると仮定すると、何が印刷されるのかを検査してそれに応じて対応できるはずです。
いいえ、他のプロセスで発生した例外を捕捉することはできません。 –
いいえ、あなたはそれをすることはできません。あなたが何らかの種類のデバッガに埋め込まれた奇妙なTclを使用していない限り。 – schlenk
変数内のすべての出力をキャッチし、正規表現を使用して例外の手がかりを見つけるのはどうですか? –