code: async def popen_uci(command: Union[str, List[str]], *, setpgrp: bool = False, loop=None, **popen_args: Any) -> Tuple[asyncio.SubprocessTransport, UciProtocol]:
      
      transport, protocol = await UciProtocol.popen(command, setpgrp=setpgrp, loop=loop, **popen_args)
      try:
          await protocol.initialize()
      except:
          transport.close()
          raise
      return transport, protocol
docs: Spawns and initializes an UCI engine.
  
      :param command: Path of the engine executable, or a list including the
          path and arguments.
      :param setpgrp: Open the engine process in a new process group. This will
          stop signals (such as keyboard interrupts) from propagating from the
          parent process. Defaults to ``False``.
      :param popen_args: Additional arguments for
          `popen <https://docs.python.org/3/library/subprocess.html#popen-constructor>`_.
          Do not set ``stdin``, ``stdout``, ``bufsize`` or
          ``universal_newlines``.
  
      Returns a subprocess transport and engine protocol pair.