2017-09-27 3 views
0

Lorsque je lance le code ci-dessous, je n'ai pas la même sortie sur la console que je vois si je lance cette commande directement via le terminal. Une idée sur pourquoi? Y at-il une autre fonction au-delà de stdout.on('data') qui crache plus d'informations? Plus précisément, lorsque je l'exécute via un terminal, j'obtiens une sorte de barre de progression indiquant un pourcentage de fin de commande. Quand je l'exécute via un nœud, il crache certaines des informations similaires antérieures, puis s'arrête pendant un moment jusqu'à ce que la commande soit terminée.La sortie spawn du processus fils du nœud est différente de celle du terminal

var sh = spawn('sh', ['app/scripts/scriptA.sh', path]); 

sh.stdout.on('data', function (data) { 
    console.log(data.toString()); 
}); 
+0

Est-il possible que le flux 'stderr' soit régulé par le débit et que cela bloque les choses? Peut-être ajouter un gestionnaire 'sh.stderr.on ('data', ...)' aussi. – jfriend00

+0

En outre, la principale différence entre l'exécuter comme vous l'êtes et l'exécuter sur la ligne de commande est que lorsque vous exécutez la ligne de commande, vous exécutez un shell, mais lorsque vous l'exécutez, vous ne l'utilisez pas. Cela pourrait conduire à des comportements différents. Vous pouvez dire au spawn de l'exécuter dans un shell si vous le souhaitez. – jfriend00

Répondre

1

Il y a quelques différences. Il se peut que vous manquiez des choses sur stderr (sh.stderr.on('data', ...)).

L'autre possibilité, surtout s'il s'agit d'une barre de progression qui réécrit la ligne, alors console.log() ne pourra pas le faire.

Ces barres de progression fonctionnent en combinant process.stdout.write() et process.stdout.cursorTo() et process.stdout.clearLine(), ce qui leur permet d'effacer et de réécrire une ligne. Mettre cela à travers console.log de data sortira très différemment.