2016-12-01 12 views
0

複数のnode.js子プロセスがあり、それらのstdout/stderrがすべて同じファイルに書き込まれるようにしたいとします。親プロセスで複数の子プロセスの親プロセスで書き込みストリームを1つだけ使用する

、理想的に私は、ファイルにそのようなものを一つのストリームを作成することができます。

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

子供が終了イベントを発しても「ストリームを開いたままにする」方法はありますか?すべての子プロセスに新しいストリームを作成する必要がないようです。結果のストリームはあなたがfalseendオプションを設定する必要がある書き込みのため閉鎖されていなかったに

答えて

1

n.stdout.pipe(strm, {end: false}); 
n.stderr.pipe(strm, {end: false}); 
+0

素敵な、この作品を願って、ありがとう! –

+0

@AlexanderMillsどういうことですか?できます? –

+0

これが機能していることを確認し、何か他のものに使用しなければならなかった、ありがとう! –

関連する問題