如何临时关闭 Ruby 中的标准输出

ruby

在写 rspec 测试时, 由于完美情怀作怪, 难免需要去掉无用的标准输出. 如果在执行

rspec .

时, 输出

.................................................

这种感觉太舒服了.

但是, 我们不能简单使用

STDOUT.close

这样会导致标准输出异常. 我们最好的办法是将标准输出重定向到空文件中, 使用后再恢复. 具体的代码如下:

def no_stdout
  windows = RUBY_PLATFORM =~ /mswin|mingw32/
  nullfile = windows ? "NUL:" : "/dev/null"
  origin = STDOUT.clone
  STDOUT.reopen( File.open(nullfile, "w+") )
  yield
ensure
  STDOUT.reopen(origin)
end

no_stdout do
  puts 'hello'
end
puts 'hello2'

发表于 2013.08.15