docs: def start_process(self, program, arguments=None, working_dir=None, print_command=True,
                        use_pseudo_terminal=True, env=None):
          """
          Starts the child process.
  
          :param program: program to start
          :param arguments: list of program arguments
          :param working_dir: working directory of the child process
          :param print_command: True to print the full command (pgm + arguments) as the first line
              of the output window
          :param use_pseudo_terminal: True to use a pseudo terminal on Unix (pty), False to avoid
              using a pty wrapper. When using a pty wrapper, both stdout and stderr are merged together.
          :param environ: environment variables to set on the child process. If None, os.environ will be used.
          """
          # clear previous output
          self.clear()
          self.setReadOnly(False)
          if arguments is None:
              arguments = []
          if sys.platform != 'win32' and use_pseudo_terminal:
              pgm = sys.executable
              args = [pty_wrapper.__file__, program] + arguments
              self.flg_use_pty = use_pseudo_terminal
          else:
              pgm = program
              args = arguments
              self.flg_use_pty = False  # pty not available on windows
  
          self._process.setProcessEnvironment(self._setup_process_environment(env))
  
          if working_dir:
              self._process.setWorkingDirectory(working_dir)
  
          if print_command:
              self._formatter.append_message('\x1b[0m%s %s\n' % (program, ' '.join(arguments)),
                                             output_format=OutputFormat.CustomFormat)
          self._process.start(pgm, args)