0

我在项目中使用gem dep_selector并且无法弄清楚如何从库的 C 扩展中抑制标准输出。

我想压制的有问题的代码在这里:

https://github.com/RiotGames/knife_cookbook_dependencies/blob/master/lib/kcd/shelf.rb#L26

我试过这个:

real_stdout = $stdout
$stdout = StringIO.new
real_stderr = $stderr
$stderr = StringIO.new
puts "This gets suppressed correctly"
selector.find_solution( ... ) # still prints to the terminal

但是当我运行脚本时我仍然得到 dep_selector 输出。

有任何想法吗?

4

1 回答 1

2

你也许可以从 Rails 中刷一些代码,比如quiet方法,它应该会为你处理这个问题。

Kernel#quietly 使用以下内容来使 STDOUT 和 STDERR 静音

# Silences any stream for the duration of the block.
#
#   silence_stream(STDOUT) do
#     puts 'This will never be seen'
#   end
#
#   puts 'But this will'
def silence_stream(stream)
  old_stream = stream.dup
  stream.reopen(RbConfig::CONFIG['host_os'] =~ /mswin|mingw/ ? 'NUL:' : '/dev/null')
  stream.sync = true
  yield
ensure
  stream.reopen(old_stream)
end
于 2012-05-17T22:49:24.360 回答