2013-03-07 49 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