0

プロジェクトでgem dep_selectorを使用していますが、ライブラリの C 拡張機能から stdout を抑制する方法がわかりません。

抑制したい問題のコードは次のとおりです。

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

quietlyメソッドのように、Rails からいくつかのコードをスワイプして、これを処理できる場合があります。

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 に答える