En Ruby, $stderr
se refiere a la corriente de salida que se actualmente utiliza como stderr, mientras que STDERR
es la corriente stderr predeterminado. Es fácil asignar temporalmente una secuencia de salida diferente a $stderr
.
require "stringio"
def capture_stderr
# The output stream must be an IO-like object. In this case we capture it in
# an in-memory IO object so we can return the string value. You can assign any
# IO object here.
previous_stderr, $stderr = $stderr, StringIO.new
yield
$stderr.string
ensure
# Restore the previous value of stderr (typically equal to STDERR).
$stderr = previous_stderr
end
Ahora usted puede hacer lo siguiente:
captured_output = capture_stderr do
# Does not output anything directly.
$stderr.puts "test"
end
captured_output
#=> "test\n"
El mismo principio se puede aplicar a los $stdout
y STDOUT
.
pregunta relacionada: http://stackoverflow.com/questions/3018595/how-do -i-redirect-stderr-and-stdout-to-file-for-a-ruby-script –