def pipe(command, options = {})
      output = options[:buffer] || ""
      silent = options[:silent]
      # self.puts uses the method defined in this file
      output_object = options[:output_object] || self
      IO.popen(command_options_to_string(command, options)) do |io|
        until io.eof?
          buffer = io.gets
          output << buffer
          output_object.puts(buffer) unless silent
        end
      end

      output
    end
run a shell command and stream the output
@param [String] command to be run