簡體   English   中英

Node.js攔截另一個進程的輸出

[英]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對象。 要收集進程的輸出,可以為該對象的stdoutstderr流建立數據處理程序。 您還應該為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_optionshttps://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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM