2016-12-01 35 views
0

假設我有多個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; 
}); 

即使孩子開始結束活動,是否有辦法「保持開放狀態」?似乎沒有必要爲每個子進程創建一個新的流。

回答

1

向所得到的流沒有關閉寫你所需要的end選項設置爲false

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

不錯,希望這個作品,謝謝! –

+0

@AlexanderMills你說什麼?有用? –

+0

確認這個工作,不得不用它來做別的,謝謝! –

相關問題