def system_execute binary, params
      # Combine the stderr and stdout for long-lived
      # processes so that they are both written to
      # stdout, this allows us to collect these streams
      # without threads or blocking eternally.
      #
      # Thanks to https://github.com/apinstein for this
      # solution.
      #params = "#{params} " + '2>&1'
      @process_thread = Sprout.current_system.execute_thread binary, params, prompt do |message|
        yield message if block_given?
        Sprout.stdout.printf message
        @prompted = true if prompt.match message
      end
      @process_runner = process_thread['runner']
    end
def system_execute binary, params
      # Combine the stderr and stdout for long-lived
      # processes so that they are both written to
      # stdout, this allows us to collect these streams
      # without threads or blocking eternally.
      #
      # Thanks to https://github.com/apinstein for this
      # solution.
      #params = "#{params} " + '2>&1'
      @process_thread = Sprout.current_system.execute_thread binary, params, prompt do |message|
        yield message if block_given?
        Sprout.stdout.printf message
        @prompted = true if prompt.match message
      end
      @process_runner = process_thread['runner']
    end
This is the override of the underlying
 Sprout::Executable template method so that we
 create the process in a thread
 in order to read and write to it.

 @return [Thread]