2009-10-30 27 views
8

场景:捕捉STDOUT和STDERR *而*它的执行(红宝石)

我必须从我的Ruby脚本调用外部程序,而这个程序发送了很多有用的(但神秘的)信息标准输出和stderr。

当程序运行,我想分析其发送到输出和错误的线条和:

  • 如果没有必要
  • 格式化删除它们/如果有必要
  • 替换它们

我尝试了所有常用技巧(系统,exec,popen,popen3,反引号等等),但是我只能在执行之后检索stdout/stderr ,而不是期间其执行。

任何想法?

哦,我在Windows :-(

+0

你可以举一个你的'技巧'(比如popen)吗? – 2009-10-30 17:37:15

+0

我猜Windows没有管道? – 2009-10-30 20:13:06

+0

@jug:Windows有完全有效的管道。 – 2009-10-31 08:25:29

回答

14

其实,这是比我想象的更简单,这似乎很好地工作:

STDOUT.sync = true # That's all it takes... 
IO.popen(command+" 2>&1") do |pipe| # Redirection is performed using operators 
    pipe.sync = true 
    while str = pipe.gets 
    puts "-> "+str # This is synchronous! 
    end 
end 

...是的,它适用于Windows!