module Compass
module IoHelper
def capture_output
real_stdout, $stdout = $stdout, StringIO.new
yield
$stdout.string
ensure
$stdout = real_stdout
end
def capture_warning
real_stderr, $stderr = $stderr, StringIO.new
$stderr.string
$stderr = real_stderr
def capture_pipe(io, options = {})
options[:wait] = 0.25
options[:timeout] = 1.0
output = ""
eof_at = nil
while !eof_at || (Time.now - eof_at < options[:wait])
if io.eof?
eof_at ||= Time.now
sleep 0.1
else
timeout(options[:timeout]) { output << io.readpartial(1024) }
output