我遇到错误的问题:
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%的运行中。有什么问题?
答案 0 :(得分:19)
要在关闭管道的情况下将程序更改为成功退出,请尝试:
process.stdout.on('error', function( err ) {
if (err.code == "EPIPE") {
process.exit(0);
}
});
答案 1 :(得分:16)
head
命令只读取前几行。您的代码需要读取其所有输出,如果无法生成输出,则会触发错误。如果从程序中丢弃输出是合法的,请不要将其视为程序中的致命错误。如果丢弃程序中的输出是不合法的,请不要将其传递给head
。
您目前有竞争条件。如果head
在程序完成编写输出之前开始忽略输入,程序将获得异常。如果程序在head
开始忽略其输入之前完成写入输出,那么一切都很好。
作为一个愚蠢的临时修复:node test.js | tee /dev/null | head
现在,tee
将获取所有程序的输出。