如何使用ruby实时捕获输出?

时间:2014-03-20 12:34:13

标签: ruby-on-rails ruby

在我的项目中,我必须在远程机器中执行命令。而且我必须实时捕获并显示命令的输出。例如,如果我在远程计算机上运行'dir'命令,那么我应该显示执行所需的分钟数(例如剩余2分钟)命令。

2 个答案:

答案 0 :(得分:1)

您可以尝试使用ruby-progressbar gem并将输出放在可以阅读的文件中

require 'ruby-progressbar'
p = ProgressBar.create(:format => '%a %B %p%% %t')
=> #<ProgressBar:0/100>           

 def test(p)
    d = Dir.new('ank')
    d.each do |file|
      sleep 4
      puts file
      p.increment
    end
end
=> nil 


1.9.3-p545 :029 > test(p)
.
..me: 00:00:06 =1% Progress                                                                                                    
bare:                                          00:00:10 == 2% Progress                                                                                                  
baze:                                        00:00:14 === 3% Progress                                                                                                
fooe:                                       00:00:18 ==== 4% Progress                                                                                               
 => #<Dir:ank> =====                                                                                                5% Progress

答案 1 :(得分:0)

看一下this,我想它至少可以回答你的一个问题

但我不确定如何轻松地为您提供该命令的执行时间

您可能需要先运行所有可能的命令来估计其执行时间,然后将该数据放入某个存储区(例如数据库)。

或者您可以创建表来存储该时间并在每个命令执行后增大该表,因此当用户尝试运行该表中已存在的命令时,您将为用户提供上次运行时的估计时间;