docs: def run(self, shell=False, ignore_errors=False, stdin=False, check_output=False):
          """Run subcommand.
  
          Args:
              shell (Optional[bool]): Run command using shell (default False)
              ignore_errors (Optional[bool]): If the command has a non-zero return code, don't raise an exception (default False)
              stdin (Optional[bool]): Plug input from stdin when running command (default False)
              check_output (Optional[bool]): Return command output as string (default False)
  
          Returns:
              String if check_output is True, else None.
  
          Raises:
              subprocess.CalledProcessError when the command has an error, unless ignore_errors is True.
          """
          previous_directory = os.getcwd()
          os.chdir(self.directory)
          try:
              kwargs = {
                  'stderr': sys.stderr,
                  'stdin': sys.stdin if stdin else None,
                  'env': self.env_vars,
                  'shell': shell,
              }
              if check_output:
                  return subprocess.check_output(self.command, **kwargs).decode("utf8")
              else:
                  kwargs['stdout'] = sys.stdout
                  return subprocess.check_call(self.command, **kwargs)
          except subprocess.CalledProcessError:
              if ignore_errors:
                  pass
              else:
                  raise
  
          # Return to previous directory
          os.chdir(previous_directory)