37 lines
768 B
Ruby
37 lines
768 B
Ruby
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
|
|
yield
|
|
$stderr.string
|
|
ensure
|
|
$stderr = real_stderr
|
|
end
|
|
|
|
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
|
|
eof_at = nil
|
|
timeout(options[:timeout]) { output << io.readpartial(1024) }
|
|
end
|
|
end
|
|
output
|
|
end
|
|
end
|
|
end
|