我正在尝试将Rake包含的touch方法与系统触摸进行比较。
每个操作都将输出发送到stdout:
require 'benchmark'
require 'rake'
n = 3
result = Benchmark.bm do |x|
x.report("sh:") do
n.times { sh "touch foo.txt" }
end
x.report("touch:") do
n.times { touch "bar.txt" }
end
end
结果:
user system total real
sh:touch foo.txt
touch foo.txt
touch foo.txt
0.000000 0.010000 0.030000 ( 0.024775)
touch:touch bar.txt
touch bar.txt
touch bar.txt
0.000000 0.000000 0.000000 ( 0.000412)
我想要的是:
user system total real
sh:touch foo.txt
0.000000 0.010000 0.030000 ( 0.024775)
touch:touch bar.txt
0.000000 0.000000 0.000000 ( 0.000412)
或其他只有结果的东西。
我在another question中读到使用Benchmark.measure
,但以下内容也不起作用:
require 'benchmark'
require 'rake'
n = 3
result = Benchmark.measure do
n.times { sh "touch foo.txt" }
end
puts result
结果:
touch foo.txt
touch foo.txt
touch foo.txt
0.000000 0.000000 0.010000 ( 0.022931)
如何对sh
和touch
进行基准测试,但阻止输出转到stdout?
答案 0 :(得分:3)
查看the source of sh
它似乎接受verbose
作为选项,因此适合您的调用应该是:
sh "touch foo.txt", verbose: false
touch "bar.txt", verbose: false
似乎文档根本没有提到这些选项。
答案 1 :(得分:0)
您可以重定向$stdout
参见此示例
puts 1
original_stdout = $stdout
$stdout = open("/dev/null", "w")
puts 2
$stdout = original_stdout
puts 3
打印
1
3
但不打印2