2011-12-29 3 views
0
catch { exec asdf.exe args } 

execコマンドに渡す名前の実行可能ファイルは、処理されない例外を発生させます。
catch {exec ...}は例外ではなく、ゼロ以外の戻りコードをキャッチするようです。
これを処理する適切な方法は何ですか?TCLスクリプトから呼び出している実行可能ファイルによって "未処理のWin32例外"がキャッチされますか?

注私は呼び出している実行可能ファイルのソースコードにアクセスできませんでした。

+0

いいえ、他のプロセスで発生した例外を捕捉することはできません。 –

+0

いいえ、あなたはそれをすることはできません。あなたが何らかの種類のデバッガに埋め込まれた奇妙なTclを使用していない限り。 – schlenk

+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; 
} 

[NB:ちなみに、コマンドは0を返す必要があり、$err_msgはまだ含まれていコマンドからの出力]

外部アプリケーションが例外的に何かを賢明に印刷すると仮定すると、何が印刷されるのかを検査してそれに応じて対応できるはずです。

関連する問題