错误:在pipe道节点输出为“|”时写入EPIPE 头”

我遇到了错误:

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) 

当pipe道输出到头。 一个简单的例子是:

 console.log('some string'); ... the same for 20 lines 

然后node test.js | head node test.js | head得到错误,这似乎出现在Ubuntu 12.04运行约70%。 有什么问题?

head命令只读取前几行。 你的代码期望它的所有输出被读取,并且如果它不能产生输出就会触发一个错误。 如果抛弃程序的输出是合法的,不要把它当作程序中的致命错误。 如果抛弃程序的输出是不合法的,那么请不要把它head

你目前有一个竞争条件。 如果在程序完成写入输出之前, head开始忽略input,程序会得到一个exception。 如果程序在head开始忽略input之前完成输出,那么一切都很好。

作为一个愚蠢的临时修复: node test.js | tee /dev/null | head node test.js | tee /dev/null | head
现在, tee将采取所有程序的输出。

如果在封闭pipe道的情况下将程序更改为成功退出,请尝试:

 process.stdout.on('error', function( err ) { if (err.code == "EPIPE") { process.exit(0); } });