首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Node.js execSync将stderr重定向到stdout

Node.js execSync将stderr重定向到stdout
EN

Stack Overflow用户
提问于 2022-08-15 13:36:48
回答 1查看 166关注 0票数 1

我试图将子进程stderr重定向到它的stdout:

代码语言:javascript
运行
复制
let buffer = execSync("echo hello 1>&2", {stdio : ["pipe","pipe", 1]});
console.log("Result: " + buffer.toString());

我的目标是在变量“缓冲区”中检索"hello“。在文档中,我看到可以重定向stderr:https://nodejs.org/api/child_process.html#child_process_options_stdio

因此,我一开始尝试将stderr输送到stdout (请参阅上面的代码),但我发现它重定向到父进程标准输出。

其结果如下:

代码语言:javascript
运行
复制
node .\main.js
hello
Result:

我试图添加一个自定义缓冲区:

代码语言:javascript
运行
复制
const {subprocess, execSync} = require("node:child_process");
let buff = Buffer.alloc(128);

execSync("echo hello 1>&2", {stdio : ["pipe",buff, buff]});
console.log("Result:" + buff.toString());

但是缓冲区仍然是空的:

代码语言:javascript
运行
复制
node .\main.js
Result:

是否可以将子流程stderr重定向到execSync返回的子进程标准输出?还是我必须使用custom streamspawnSync

EN

回答 1

Stack Overflow用户

发布于 2022-08-15 14:17:22

execSync返回已执行命令的stdout,而不考虑stdio选项。您想要实现的目标可以通过异步exec来实现。

代码语言:javascript
运行
复制
child_process.exec("echo hello 1>&2", function(error, stdout, buffer){
  console.log("Result: " + buffer.toString());
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73361778

复制
相关文章

相似问题

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