Javascript 当输出以ruby打印到标准输出时,如何使用回调
我正在编写脚本来监视服务器状态。 我可以用javascript编写代码,但必须用ruby编写 在javascript中,可以像这样使用node.js来完成Javascript 当输出以ruby打印到标准输出时,如何使用回调,javascript,ruby,node.js,spawn,Javascript,Ruby,Node.js,Spawn,我正在编写脚本来监视服务器状态。 我可以用javascript编写代码,但必须用ruby编写 在javascript中,可以像这样使用node.js来完成 var iostat=require('child_process')。spawn(“iostat”,[“-w1]”); iostat.stdout.on('data',函数(data){ 控制台日志(数据); }); 此代码每秒执行iostat命令并输出到控制台。 如何在ruby中实现同样的功能? 换句话说,我想在用ruby打印stdou
var iostat=require('child_process')。spawn(“iostat”,[“-w1]”);
iostat.stdout.on('data',函数(data){
控制台日志(数据);
});
此代码每秒执行iostat命令并输出到控制台。
如何在ruby中实现同样的功能?
换句话说,我想在用ruby打印stdout时使用callback。可能有更好的方法,但您可以这样做:
module PutsWatcher
def puts(string)
super("***#{string}***")
end
end
$stdout.extend PutsWatcher
puts "here"
# => "***here***"
如果您在IRB或Pry中执行此操作,则会有点奇怪,因为它们会在您自己的基础上自行生成输出(即,在您执行puts之后,nil
),但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)>
pry(主)>模块定位器
撬(主)*def puts(串)
撬(主)*超级(“***{string}***”)
撬(主)*端
撬(主)*端
=>零
撬(主)>$stdout.extend PutsWatcher
***=> #
***
撬动(主)>放置“yo”
***哟***
***=>零
***
撬动(主)>
顺便说一下,我不是建议你这么做。。。修补核心类通常是个坏主意。我提到它纯粹是为了学术目的。事实上,我并不是有意这样做的。例如,如果我像这样编写代码,放入'iostat-w1'
我永远不会得到结果,因为iostat会继续输出。但是,我希望每秒都能得到结果,然后每次都不断地处理它。