2016-10-12 10 views
0

Windowsでnodejsを使用してバッチファイルから正しい終了コードを取得しようとしています。child_processがバッチファイルから正しい終了コードを返さない

私が期待されるエラーコードを参照して、コマンドラインから実行する場合:

ml.bat profile bootstrap 

ERROR: [".../deploy/lib/RoxyHttp.rb:362:in block in request'", ".../deploy/lib/RoxyHttp.rb:352:in loop'", ".../deploy/lib/RoxyHttp.rb:352:in request'", ".../deploy/lib/MLClient.rb:110:in go'", ".../deploy/lib/server_config.rb:1963:in get_sid'", ".../deploy/lib/server_config.rb:2056:in execute_query_7'",".../deploy/lib/server_config.rb:510:in execute_query'",".../deploy/lib/server_config.rb:709:in bootstrap'", "deploy/lib/ml.rb:168:in `'"

私は終了コードが非ゼロであったことを確認します。

echo %errorlevel% 

12

は以下でありますNodeJSで使用する対応するコード - 常に0の終了コードを与える:

var stdout = ""; 
let proc = child_process.spawn("ml.bat", ["profile", "bootstrap"], {shell:true}); 

proc.stdout.on('data', d => stdout += d.toString() + '\n';); 
proc.on('close', exitcode => { 
    console.log(stdout); 

    if (exitcode !== 0) { 
     console.log('ERROR in command'); 
     process.exit(); 
    } 
}); 

私はいくつかのバリエーション(exec、execSync、spawnSync)とオプション(シェル "cmd.exe/c")を使用しようとしましたが、ノードを使用してゼロ以外のコードを得ることはできません。プログラムはstderrに出力を出力しません。

NodeJSで正しいエラーコードを取得するにはどうすればよいですか?

+0

あなたはコールバックに渡されたパラメータに 'exitcode'という名前を付けましたが、' code'をテストします。私はこれがあなたのサンプルコードのタイプミスであると仮定します。これは 'ReferenceError'の結果が –

+0

となるためです。打ち間違え。ありがとう! – chriskelly

答えて

0

、私はml.batするには、次の最後の行を追加しました:

exit /b %errorlevel% 

今ではWindowsとLinuxの両方で同じように動作します。

0

あなたはノードが子プロセスのエラーコードを返すようにしたい場合は、exit関数にそれを渡す必要があります....

process.exit(終了コード);

Tomがコメントで述べているように、「コード」は定義されていないため、修正する必要があります。

+0

ありがとうございますが、私は実際にノードの独自の終了コードには興味がありません。子プロセスの終了コードです。 – chriskelly

0

私はあなたがブロッキング呼び出しであり、このプロセスが完了した後にのみ返しchild_process.spawnSyncを使用することを示唆しているNode Docs: process_process_exitcodeを参照してください。また、返されたオブジェクトには、コードが含まれているのプロパティが含まれています。

しかし、spawnやspawnSyncなどのすべてのケースで、サブプロセスが何らかの理由で失敗すると、結果オブジェクトには常にエラーオブジェクトが含まれていると思います。したがって、このオブジェクトの存在を確認するだけで十分です。この問題を解決するために

+0

ありがとう、David。 spawnSync、execSync、execを試しました。問題は、Windows(cmd)がバッチファイルの実行後に正しいエラーレベルを報告しても、NodeJSに返されるコードが常に0であることです。どういうわけか真のエラーコードが却下されています。 – chriskelly

関連する問題