2014-04-10 136 views
0

從我所瞭解的情況來看,這應該可行,但對我來說目前還沒有運氣。發佈這個問題希望我做一些非常愚蠢的事情。我有:如何使用child_process.spawn生成從ruby腳本輸出流輸出

hello.rb的

#!/usr/bin/env ruby 

3.times do 
    puts 'hello' 
    sleep 1 
end 

tail.js

var cp = require('child_process'); 
var tail = cp.spawn('./hello.rb'); 

tail.stdout.pipe(process.stdout); 

/* Also tried this: */ 
tail.stdout.on('data', function(data) { 
    console.log(data.toString()) 
}); 

hello.rb是可執行的。

當我運行node tail.js,3個hello被打印到標準輸出,但,循環完成。您可以通過將更改爲loop進行無限循環驗證,並在stdout中看不到任何內容。無限循環的情況實際上是我試圖找出如何去做的。

我在做什麼錯?

回答

1

您應該嘗試在您的puts之後添加$stdout.flush,或者在ruby腳本的開頭設置$stdout.sync = true

+0

工作,比你!你能補充一點關於那是什麼嗎? – mehulkar

+0

我還編輯了問題標題/標籤,以反映這與ruby比'child_process'或節點有關。 – mehulkar

+0

'$ stdout.flush'刷新當前的stdout緩衝區,因爲默認情況下寫入stdout是異步的。 '$ stdout.sync = true'切換到同步stdout輸出,該輸出禁用stdout緩衝區並確保在繼續執行之前刷新每個寫入。 – mscdex