我正在编写用于监视服务器状态的脚本。 我可以用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中实现相同的功能? 换句话说,我想在styout打印在ruby中时使用回调。
答案 0 :(得分:1)
可能有更好的方法可以做到这一点,但你可以这样做:
module PutsWatcher
def puts(string)
super("***#{string}***")
end
end
$stdout.extend PutsWatcher
puts "here"
# => "***here***"
如果你在IRB或Pry中这样做会有点奇怪,因为它们会自己产生输出(即你nil
之后的puts
),但是这里是副本/从pry粘贴:
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)>
顺便说一句,我不是建议你这样做...修补核心类通常是一个坏主意。我纯粹出于学术目的而提到它。