エラーの取得に問題があります:
events.js:48
throw arguments[1]; // Unhandled 'error' event
^
Error: write EPIPE
at errnoException (net.js:670:11)
at Object.afterWrite [as oncomplete] (net.js:503:19)
出力をヘッドに配管する場合。試してみる簡単なケースは次のとおりです。
console.log('some string');
... the same for 20 lines
その後 node test.js | head
エラーを取得するには、Ubuntu 12.04で約70%実行すると表示されるようです。どうしたの?
head
コマンドは、最初の数行のみを読み取ります。コードは、すべての出力が読み取られることを期待し、出力を生成できない場合はエラーをトリガーします。プログラムからの出力を破棄することが合法である場合、それをプログラムの致命的なエラーとして扱わないでください。プログラムからの出力を破棄することが合法でない場合は、head
にパイプしないでください。
現在、競合状態にあります。プログラムが出力の書き込みを完了する前にhead
が入力を無視し始めると、プログラムは例外を受け取ります。 head
が入力を無視し始める前に、プログラムが出力の書き込みを終了した場合、すべて問題ありません。
ばかげた一時的な修正として:node test.js | tee /dev/null | head
今、tee
はプログラムのすべての出力を取得します。
パイプが閉じている場合にプログラムが正常に終了するように変更するには、次のことを試してください。
process.stdout.on('error', function( err ) {
if (err.code == "EPIPE") {
process.exit(0);
}
});