29

我在收到错误时遇到问题:

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% 中。有什么问题?

4

3 回答 3

24

要在关闭管道的情况下更改程序以成功退出,请尝试:

process.stdout.on('error', function( err ) {
    if (err.code == "EPIPE") {
        process.exit(0);
    }
});
于 2013-04-08T16:42:26.527 回答
20

head命令仅读取前几行。您的代码希望读取其所有输出,如果无法生成输出,则会触发错误。如果从程序中丢弃输出是合法的,请不要将其视为程序中的致命错误。如果从程序中丢弃输出是不合法的,请不要将其通过管道传输到head.

您当前有一个竞争条件。如果head在程序完成写入输出之前开始忽略输入,则程序会出现异常。如果程序在head开始忽略其输入之前完成了输出写入,那么一切都很好。

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

于 2012-09-08T10:21:12.653 回答
0

它对我有用,我试图将我的代码上传到 aws ec2 但我遇到了这个错误(错误:写 EPIPE)(npm uninstall phantomjs-prebuilt)并再次安装(npm install phantomjs-prebuilt@2.1.13

于 2022-01-20T12:37:34.227 回答