我正试图用将子流程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());
});