Votre code n'inclut rien qui écrit dans le stdin de votre processus enfant, donc je serais surpris si vous obteniez les points de suspension indiquant une commande incomplète alors qu'en fait vous n'envoyez aucune commande - incomplète ou autre.
Cela dit, de nombreux utilitaires de ligne de commande se comportent différemment lorsqu'ils découvrent un vrai terminal connecté à leur stdin/stdout. Par exemple. git log
paginera les résultats lorsque vous l'exécuterez directement, mais pas lorsque vous dirigerez les résultats vers une autre commande telle que git log | cat
donc cela peut aussi être le cas ici.
Cela peut également être lié à la mise en mémoire tampon :si votre flux est mis en mémoire tampon, vous ne verrez pas immédiatement de ligne qui ne se termine pas par une nouvelle ligne.
La vraie question est :voyez-vous le >
rapide? Envoyez-vous une commande au shell mongo ?
L'écriture de scripts d'outils CLI interactifs peut être délicate. Par exemple. voyez ce que j'ai dû faire pour tester un programme interactif très simple ici :
J'ai dû créer deux canaux nommés, m'assurer que stdin, stderr et stdout ne sont pas mis en mémoire tampon, puis utiliser d'autres astuces pour que cela fonctionne. C'est un script shell mais c'est juste pour vous montrer un exemple.