Node.js execSync将stderr重定向到stdout



我正试图用将子流程stderr重定向到它的stdout

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

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

因此,我一开始尝试将stderr通过管道发送到stdout(请参阅上面的代码(,但我发现它重定向到了父进程stdout。

产生以下输出:

node .main.js
hello
Result:

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

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());

但缓冲区保持为空:

node .main.js
Result:

是否可以将子流程stderr重定向到execSync返回的子流程stdout?还是我必须使用自定义流或spawnSync

execSync返回已执行命令的stdout,与stdio选项无关。您想要实现的目标可以通过异步exec:来实现

child_process.exec("echo hello 1>&2", function(error, stdout, buffer){
console.log("Result: " + buffer.toString());
});

最新更新