class IORedirect
IORedirect¶ ↑
A class to redirect $stdout, or other IO object, to a StringIO object, or any other object with a write() method.
s = StringIO.new r = IORedirect.redirect($stdout, s) do $stdout.puts "this is a test" end
Public Class Methods
new(from, to)
click to toggle source
Start redirection from one IO object to any other object with a write()
method. from
is the IO object to redirect from, and
to
is the object to redirect to.
# File lib/more/facets/ioredirect.rb, line 35 def initialize(from, to) @from = from @to = to start() end
redirect(from, to) { || ... }
click to toggle source
An exception-safe class method for redirection
# File lib/more/facets/ioredirect.rb, line 67 def self.redirect(from, to) s = new(from, to) begin yield ensure s.stop end end
Public Instance Methods
start()
click to toggle source
Start redirection, if it has not already been started.
# File lib/more/facets/ioredirect.rb, line 42 def start raise "Redirection already in progress" if @t tmp = @from.dup r, w = *IO.pipe @from.reopen(w) @t = Thread.new do begin loop do s = r.read(1) # TODO: can I make this buffered? @to.write(s) end ensure @from.reopen(tmp) @t = nil end end end
stop()
click to toggle source
Stop redirection, if it is occurring
# File lib/more/facets/ioredirect.rb, line 61 def stop raise "Redirection already stopped" if not @t @t.kill end