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;
});
即使孩子開始結束活動,是否有辦法「保持開放狀態」?似乎沒有必要爲每個子進程創建一個新的流。
不錯,希望這個作品,謝謝! –
@AlexanderMills你說什麼?有用? –
確認這個工作,不得不用它來做別的,謝謝! –