NodeJS 错误:将节点输出管道传输到“”时写入EPIPE|标题”

pdkcd3nj  于 2022-12-03  发布在  Node.js
关注(0)|答案(6)|浏览(133)

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

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%的运行都会出现此错误。问题是什么?

smtd7mpg

smtd7mpg1#

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

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

0sgqnhkj2#

head命令只读取前几行。您的代码希望读取其所有输出,如果无法生成输出,则会触发错误。如果丢弃程序输出是法律的的,则不要将其视为程序中的致命错误。如果丢弃程序输出是非法的,则不要将其通过管道传输到head
您目前有竞争状况。如果head在程式完成写入输出之前开始忽略输入,则程式会发生例外状况。如果程式在head开始忽略输入之前完成写入输出,则一切正常。
任傻临时搞定:node test.js | tee /dev/null | head
现在,tee将获取程序的所有输出。

agyaoht7

agyaoht73#

通过管道连接到一个子进程,该子进程设法使主进程崩溃,并通过添加一个stdin错误callaback修复了我的问题:

const p = child.spawn(myCommand);

// this just prevents exiting main node process and exits process "p" instead
p.stdin.on('error', function () {});

stream.pipe(p.stdin);
ryoqjall

ryoqjall4#

它的工作对我来说,我试图上传我的代码到aws ec2,但我面临这个错误(错误:写入EPIPE)(npm卸载phantomjs-prebuilt)并再次安装(npm安装phantomjs-prebuilt@2.1.13

pepwfjgg

pepwfjgg5#

对我来说,解决方案是将项目使用的域添加到系统的host文件中。
您可以在以下文件中找到此域:.envconfig.babel.js以及其它的。

0s0u357o

0s0u357o6#

以下命令对我有效:sudo apt-get install libfontconfig

相关问题