2016-04-26 130 views
1

我已經創建了一個節點腳本來啓動子進程,並且我已成功將其stdout重定向到控制檯。獲取node.js中所有嵌套子進程的標準輸出

但是,如果子進程創建一個嵌套的子進程,那麼我無法得到它的標準輸出或標準輸入。

我有一個模糊的想法,我必須創建流並將其傳遞給父進程,但我現在還不確定。

有人可以請一個方法來實現它。

下面是我當前的代碼來啓動子進程

spawn = require('child_process').spawn; 
ls = spawn "ruby" , [ @editor.getPath() ] 
ls.stdout.on 'data', (data) -> console.log data.toString() 
ls.stderr.on 'data', (data) -> console.log data.toString() 

回答

1

相關鏈接:Node API documentation

  • 如果您需要的是讓你流子(和孫子)的數據,最好的選擇是繼承流:

spawn('prg', [], { stdio: 'inherit' });

  • 如果您需要將子數據導入自定義對象,請使用管道,然後安裝流數據回調 - 例如您已經做了什麼。

  • 如果第一級別的孩子是一個節點進程,它需要通過「繼承」模型產生孫子,這兩個數據都可供父級使用。否則,孩子必須用'pipe'產生並安裝處理程序,然後將它們饋送到適當的流中:例如,將孫子的錯誤寫入孩子的stderr,等等。

  • 如果孫子是非節點程序,'繼承'是所需的模型。

  • 如果孩子是非節點,可能無法獲取孫兒的數據,因爲數據的可用性將取決於子進程如何產生孫子並處理其流。

希望這會有所幫助。

相關問題