2013-03-07 76 views
1

我写了一个简短的ruby脚本来定时运行我的命令行实用程序。我使用的是Ruby的Benchmark模块像这样:将ruby的基准输出保存到一个文件中

Benchmark.bm(" "*7 + CAPTION, 7, FMTSTR, ">avg:") do |bench| 
    #this loops over a couple of runs 
    bench.report("Run #{run}: ") do 
    begin 
    Timeout::timeout(time) { 
     res = `#{command}` 
    } 
    rescue Timeout::Error 
    end 
    end 
end 

超时使用可能有点粗糙,但应该没我的需求。问题是Benchmark.bm只是打印基准测试结果。我希望能够将它们保存到文件中以供进一步处理(它在单个脚本中运行了几次,所以我不想仅仅使用终端输出 - 对于这样简单的事情似乎太费力了)

+0

它看起来像最简单的方法手创乐团将检查库的源代码,做自己的东西。 :(他们在几个地方使用STDOUT。 – reto 2013-03-07 15:16:18

回答

2

这比您想象的要容易,只需将以下几行添加到脚本的开头即可。

$stdout = File.new('benchmark.log', 'w') 
$stdout.sync = true 

一切都重定向到文件,当然,如果你需要一些输出到控制台,你将不得不停止这样的重定向。

$stdout = STDOUT 

编辑:在这里,我用来测试这个

require 'benchmark' 

$stdout = File.new('console.out', 'w') 
$stdout.sync = true 

array = (1..100000).to_a 
hash = Hash[*array] 

Benchmark.bm(15) do |x| 
    x.report("Array.include?") { 1000.times { array.include?(50000) } } 
    x.report("Hash.include?") { 1000.times { hash.include?(50000) } } 
end 
+0

我在几分钟前尝试了这一点,但不幸的是它不起作用。我得到以下错误:'benchmark.rb:207:in'*':无法将字符串转换为整型(TypeError)''我觉得这与reto在我的问题下的评论有关 – mck 2013-03-07 15:52:14

+0

我在我的电脑上试过了,它会工作,我会发布我使用的testscript,我使用windows 7和ruby 1.9.3 – peter 2013-03-07 16:29:38

+0

我' m使用红宝石1.8.7。我会尝试升级。谢谢! – mck 2013-03-07 16:42:43

相关问题