例外のレスキューなど、警告をキャプチャする方法はありますか?単に警告を無効にするのではなく(を実行して$VERBOSE = nil
)、実行時に警告メッセージの内容をキャプチャしたいと思います。
質問する
1202 次
3 に答える
2
stderr
StringIOオブジェクトにリダイレクトして、警告出力を文字列に取り込むことができます。
require 'stringio'
old_stderr = $stderr
$stderr = StringIO.new
Foo = 1
Foo = 2 # generates a warning
puts $stderr.string # prints the warning
$stderr = old_stderr
于 2012-10-07T08:22:10.920 に答える
2
require 'stringio'
def capture_stderr
old, $stderr = $stderr, StringIO.new
result = yield
[result, $stderr.string]
ensure
$stderr = old
end
于 2015-10-05T05:14:11.957 に答える
1
これはちょっと醜いです。ファイルに書き込むことになり、ファイルに書き込む権限がない可能性があり$stderr
、警告だけでなく、へのすべての出力が非表示になるだけでなく、次のように機能します。
$stderr.reopen("errors.txt")
MyConst = 4
MyConst = 5 # generates a warning on the standard error output
$stderr.reopen("errors2.txt")
puts "The following errors happened:"
puts File.read("errors.txt")
于 2012-10-06T17:28:52.153 に答える