docs: def communicate(self):
          """Retrieve information."""
          self._communicate_first = True
          self._process.waitForFinished()
  
          if self._partial_stdout is None:
              raw_stdout = self._process.readAllStandardOutput()
              stdout = handle_qbytearray(raw_stdout, _CondaAPI.UTF8)
          else:
              stdout = self._partial_stdout
  
          raw_stderr = self._process.readAllStandardError()
          stderr = handle_qbytearray(raw_stderr, _CondaAPI.UTF8)
          result = [stdout.encode(_CondaAPI.UTF8), stderr.encode(_CondaAPI.UTF8)]
  
          # FIXME: Why does anaconda client print to stderr???
          if PY2:
              stderr = stderr.decode()
          if 'using anaconda' not in stderr.lower():
              if stderr.strip() and self._conda:
                  logger.error('{0}:\nSTDERR:\n{1}\nEND'.format(
                          ' '.join(self._cmd_list), stderr))
              elif stderr.strip() and self._pip:
                  logger.error("pip error: {}".format(self._cmd_list))
          result[-1] = ''
  
          if self._parse and stdout:
              try:
                  result = json.loads(stdout), result[-1]
              except Exception as error:
                  result = stdout, str(error)
  
              if 'error' in result[0]:
                  if not isinstance(result[0], dict):
                      result = {'error': str(result[0])}, None
                  error = '{0}: {1}'.format(" ".join(self._cmd_list),
                                            result[0]['error'])
                  result = result[0], error
  
          if self._callback:
              result = self._callback(result[0], result[-1],
                                      **self._extra_kwargs), result[-1]
  
          self._result = result
          self.sig_finished.emit(self, result[0], result[-1])
  
          if result[-1]:
              logger.error(str(('error', result[-1])))
  
          self._fired = True
  
          return result