首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >错误:通过管道将节点输出写入"| head“时写入EPIPE

错误:通过管道将节点输出写入"| head“时写入EPIPE
EN

Stack Overflow用户
提问于 2012-09-08 18:08:47
回答 2查看 60.5K关注 0票数 28

我在获取错误时遇到了问题:

代码语言:javascript
复制
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时。一个简单的例子是:

代码语言:javascript
复制
console.log('some string');
... the same for 20 lines

然后用node test.js | head获取错误,这似乎在Ubuntu12.04上运行了大约70%的错误。有什么问题吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-09-08 18:21:13

head命令只读取前几行。您的代码预期其所有输出都将被读取,如果无法生成输出,则会触发错误。如果从程序中丢弃输出是合法的,那么不要将其视为程序中的致命错误。如果丢弃程序的输出是不合法的,就不要通过管道将其传递给head

你当前有一个竞态条件。如果head在程序写完输出之前就开始忽略输入,程序就会得到一个异常。如果程序在head开始忽略它的输入之前完成了它的输出,那么一切都是正常的。

作为一个愚蠢的临时修复:node test.js | tee /dev/null | head

现在,tee将获取程序的所有输出。

票数 20
EN

Stack Overflow用户

发布于 2013-04-09 00:42:27

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

代码语言:javascript
复制
process.stdout.on('error', function( err ) {
    if (err.code == "EPIPE") {
        process.exit(0);
    }
});
票数 24
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12329816

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档