2011-10-22 98 views
2

我正在編寫用於查看服務器狀態的腳本。 我可以在JavaScript中編寫代碼,但我必須用紅寶石編寫代碼。如何在ruby中將輸出打印到標準輸出時使用回調

在javascript中,可以使用像這樣的node.js來完成。

var iostat = require('child_process').spawn("iostat", ["-w 1"]); 
iostat.stdout.on('data', function (data) { 
    console.log(data); 
}); 

此代碼執行iostat命令並每秒輸出到控制檯。 如何在ruby中實現同樣的功能? 換句話說,我想在使用ruby打印標準輸出時使用回調。

回答

1

可能有更好的方法來做到這一點,但你可以做這樣的事情:

module PutsWatcher 
    def puts(string) 
    super("***#{string}***") 
    end 
end 

$stdout.extend PutsWatcher 

puts "here" 
# => "***here***" 

這是一個有點古怪,如果你這樣做的IRB或撬,因爲它們產生的輸出本身之上你自己(即nil你這樣做之後puts),但這裏是從撬複製/粘貼:

pry(main)> module PutsWatcher 
pry(main)* def puts(string) 
pry(main)*  super("***#{string}***") 
pry(main)* end 
pry(main)* end 
=> nil 
pry(main)> $stdout.extend PutsWatcher 
***=> #<IO:<STDOUT>> 
*** 
pry(main)> puts "yo" 
***yo*** 
***=> nil 
*** 
pry(main)> 

順便說一句,我不建議你這樣做......修補核心課程通常是一個壞理念。我純粹爲了學術目的而提及它。

+0

其實我沒打算這樣的事情。 例如,如果我寫這樣的代碼, 'puts'iostat -w 1'' 我從來沒有得到結果,因爲iostat會繼續輸出。 但是,我想每秒都得到結果,然後每次連續處理它。 –

相關問題