保留Node.js中`child_process.spawnSync`子进程的`stdout`和`stderr`输出的顺序

时间:2018-01-17 22:22:29

标签: node.js pipe stdout child-process

GalleryPhoto

const spawnSync = require('child_process').spawnSync; let x = spawnSync('bash', ['-c', 'echo "1stdout" ; echo "2stderr" >&2 ; echo "3stdout"']); 命令只是一个示例。命令可以是bashlswget - 无关紧要。)

当然,我可以使用git访问子流程的stdout,使用x.stdout访问stderr,这样我就可以

x.stderr

1stdout
3stdout

分别。但是,我想要的是一个包含

的变量
2stderr

我觉得options.stdio中有些内容可以提供帮助,但我无法弄明白。

1 个答案:

答案 0 :(得分:0)

如果您可以将交织的输出写入文件:

let fd = createWriteStream('path', options)

// wait on fd 'open' event however you want to.

let results = child_process.spawnSync('ls', args, {stdio: [null, fd, fd]})

fs.closeSync(fd)

如果你想把它作为一个字符串,那么最简单的方法就是只读取文件。我认为另一种方法是创建双工流并在{stdio: [null, streamObj, streamObj]}中传递流对象。这将需要处理流事件并动态构建字符串,如果您使用spawnSync(),则可能不需要。