Seu código não inclui nada que grave no stdin do seu processo filho, então eu ficaria surpreso se você obtivesse as reticências que indicam o comando incompleto quando, na verdade, você não envia nenhum comando - incompleto ou não.
Dito isto, muitos utilitários de linha de comando se comportam de maneira diferente quando descobrem um terminal real conectado ao seu stdin/stdout. Por exemplo.
git log
irá paginar os resultados quando você executá-lo diretamente, mas não quando você canalizar os resultados para algum outro comando como git log | cat
então este também pode ser o caso aqui. Isso também pode ter a ver com o buffer - se o seu fluxo estiver em buffer de linha, você não verá nenhuma linha que não seja terminada com uma nova linha imediatamente.
A verdadeira questão é:você vê o
>
pronto? Você envia algum comando para o shell do mongo? A criação de scripts de ferramentas interativas da CLI pode ser complicada. Por exemplo. veja o que eu tive que fazer para testar um programa interativo bem simples aqui:
Eu tive que criar dois pipes nomeados, certificar-se de que stdin, stderr e stdout não são armazenados em buffer e, em seguida, usar alguns outros truques para fazê-lo funcionar. É um script de shell, mas é apenas para mostrar um exemplo.