我需要在NodeJS中生成一个新进程。它的stderr应该被重定向到它的标准输出(与bash中的2>&1
相同)。
proc.js
var child_process = require('child_process');
var opt = {stdio: ['ignore', 'pipe', 'pipe']};
var proc = child_process.spawn('./myscript', [], opt);
proc.stderr.pipe(proc.stdout);
proc.stdout.on('data', function (buf) {
console.log('stdout', buf.toString());
});
proc.on('error', function (...args) {
console.log('error', args);
});
proc.on('exit', function (code, signal) {
console.log('exit', code, signal);
});
proc.on('close', function (code, signal) {
console.log('close', code, signal);
});
的MyScript
#!/bin/bash
echo 111
echo 222 >&1
echo 333 >&2
echo 444
不幸的是,这不起作用。输出中没有 333 :
stdout 111
222
444
exit 0 null
close 0 null
答案 0 :(得分:3)
我认为你的问题是你正在将子(proc)stderr传递给它自己的stdout,而不是你自己的stdout。 proc.stdout是一个源,而不是一个接收器,所以它不能从另一个管道接收输入。
也许你想要的是,而不是:
proc.stderr.pipe(proc.stdout);
这样:
proc.stderr.pipe(process.stdout);
process.stdout是你的父进程stdout,它是一个接收器,因此可以使用proc.stderr作为源。