1. ホーム
  2. node.js

[解決済み] エラー: ノード出力を "|head" にパイプするときに EPIPE を書き込む。

2022-02-05 04:03:46

質問

エラーが出るので困っています。

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)

を使用すると、出力をheadにパイプすることができます。試してみる簡単なケースは

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 は、プログラムの出力をすべて受け取ります。