2011-10-22 114 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会继续输出。 但是,我想每秒都得到结果,然后每次连续处理它。 –

相关问题