Скажите, что у меня есть несколько дочерних процессов node.js, и я хочу, чтобы их stdout/stderr записывались в один и тот же файл.Используйте только один поток записи в родительском процессе для нескольких дочерних процессов
В родительском процессе, в идеале я мог бы создать один поток в файл, что-то вроде этого:
const cp = require('child_process');
const strm = fs.createWriteStream('bar.log');
async.each([1,2,3], function(item, cb){
const n = cp.spawn('node', ['foo' + item + '.js']);
n.stdout.pipe(strm);
n.stderr.pipe(strm);
n.on('close', cb);
}, function(err){
if(err) throw err;
});
, что, вероятно, произойдет в том, что мы получим ошибку:
Error: write after 'end'
Следующее, как представляется, устраняет проблему, в результате чего мы создаем новый поток для каждого дочернего процесса:
const cp = require('child_process');
async.each([1,2,3], function(item, cb){
const n = cp.spawn('node',['foo' + item + '.js']);
//create a new stream for every child process...
const strm = fs.createWriteStream('bar.log');
n.stdout.pipe(strm);
n.stderr.pipe(strm);
n.on('close', cb);
}, function(err){
if(err) throw err;
});
Есть ли способ «держать поток открытым», даже если ребенок запускает конечное событие? Кажется, нет необходимости создавать новый поток для каждого дочернего процесса.
приятно, надеюсь, что это работает, спасибо! –
@AlexanderMills Что вы говорите? Оно работает? –
Подтверждено, что это сработало, пришлось использовать его для чего-то еще, спасибо! –