[英]Node.js intercept output of another process
我正在嘗試從正在運行的Node.js進程中啟動一些進程。 問題是,這些必須從腳本啟動,並使用exec這樣執行:
exec("./scripts/run.sh",(err, stdout, stderr) => {
if (err) {
console.error(err);
return;
}
this.logs = this.logs.unshift(timestamp() + stdout);
this.errorlogs = this.logs.unshift(timestamp() + stderr);
});
不重定向我需要的輸出。 Fork似乎僅適用於非Node.js進程。
流程運行良好,並且可以充當主流程的子流程。 我只需要實際獲取stdout和stderr輸出。 有什么建議么?
在執行的進程終止后, child_process.exec()
僅運行一次回調函數。 如果要在進程仍在運行時從其stdout和stderr中獲取增量數據,請使用child_process.spawn()
並設置options.stdio
屬性,以使父進程可以使用該進程的stdout和stderr。
child_process.spawn()
返回一個ChildProcess
對象。 要收集進程的輸出,可以為該對象的stdout
和stderr
流建立數據處理程序。 您還應該為error
事件的處理程序建立處理程序,該error
事件在進程啟動失敗時觸發,而close
事件在這些流關閉且進程終止時觸發。
它看起來像這樣:
child = spawn("./scripts/run.sh",
[],
{stdio: ['ignore', 'pipe', 'pipe']});
child.on('error', (err) => }
console.log('child launch failed: ', err);
});
child.on('close', (code) => {
console.log('child ended: ', code);
});
child.stdout.on('data', (outdata) => {
this.logs = this.logs.unshift(timestamp() + outdata);
});
child.stderr.on('data', (errdata) => {
this.errorlogs = this.logs.unshift(timestamp() + errdata);
});
詳細信息在https://nodejs.org/dist/latest-v6.x/docs/api/child_process.html#child_process_child_process_spawn_command_args_options和https://nodejs.org/dist/latest-v6的Node.js文檔中.x / docs / api / child_process.html#child_process_class_childprocess
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.