docs: def start_process(self, process, args=None, cwd=None, env=None):
          """
          Starts a process interactively.
  
          :param process: Process to run
          :type process: str
  
          :param args: List of arguments (list of str)
          :type args: list
  
          :param cwd: Working directory
          :type cwd: str
  
          :param env: environment variables (dict).
          """
          self.setReadOnly(False)
          if env is None:
              env = {}
          if args is None:
              args = []
          if not self._running:
              self.process = QProcess()
              self.process.finished.connect(self._on_process_finished)
              self.process.started.connect(self.process_started.emit)
              self.process.error.connect(self._write_error)
              self.process.readyReadStandardError.connect(self._on_stderr)
              self.process.readyReadStandardOutput.connect(self._on_stdout)
              if cwd:
                  self.process.setWorkingDirectory(cwd)
              e = self.process.systemEnvironment()
              ev = QProcessEnvironment()
              for v in e:
                  values = v.split('=')
                  ev.insert(values[0], '='.join(values[1:]))
              for k, v in env.items():
                  ev.insert(k, v)
              self.process.setProcessEnvironment(ev)
              self._running = True
              self._process_name = process
              self._args = args
              if self._clear_on_start:
                  self.clear()
              self._user_stop = False
              self._write_started()
              self.process.start(process, args)
              self.process.waitForStarted()
          else:
              _logger().warning('a process is already running')