2012-11-19 3 views
0

J'essaie d'exécuter une commande de ligne de commande (ici: cat) à partir de nodejs à l'aide de la commande spawn. La sortie de la commande semble se trouver quelque part dans le Buffer, mais le reste est également généré. Y at-il une sorte de caractère nul que je pourrais utiliser pour déterminer quand la sortie se termine?Restriction d'un tampon à la sortie d'un processus enfant nodejs

Mise à jour: Pour clarifier les choses: Il y a beaucoup de caractères aléatoires dans la sortie et ils semblent faire partie du tampon. Je cherche un moyen de diviser la sortie utile de la commande de ligne de commande à partir du reste de la mémoire tampon.

+0

"La sortie de la commande semble être quelque part dans le tampon, mais le reste est également généré." Je l'ai lu plusieurs fois et je n'arrive pas à comprendre ce que cela signifie. Le reste de quoi? Produit par quoi? –

+0

Je suis désolé. Je veux dire le reste du tampon. Il semble que ce soit de la merde au hasard. Similaire à une variable non initialisée. La sortie signifie que le contenu est envoyé à la console par console.log. – funkysash

Répondre

1

Cela dépend de ce que vous avez dans InBUFFER, que vous ne montrez pas.

Si vous avez une chaîne dans InBUFFER, par exemple "test", le result contiendra test suivi par un grand nombre de zéros, jusqu'à 2048 (les 0s seront converties à blanc lorsque toString est appelé).
Si vous avez des déchets à l'intérieur InBUFFER, vous obtiendrez des déchets en sortie. Peut-être que vous lisez un fichier et ne définissez pas l'encodage de caractères correctement.

+0

Si si remplir le inBuffer avec 'InBUFFER = new Buffer (" test "),' ma sortie commence par test et continue avec des chiffres aléatoires et des symboles. Exemple comme ci-dessus. Je sais que je pourrais le limiter par la longueur, mais cela ne marcherait pas pour un cas ('ls' par exemple) où je ne connais pas la longueur du résultat. – funkysash

+0

Si si le résultat de remplissage par 'result.fill (0);' alors cela fonctionne. Mais cela ne semble pas être la bonne solution pour cela. – funkysash

+0

en fait, je pense que c'est le cas, car le tampon n'est probablement pas garanti d'être rempli avec des zéros (par défaut). Soit cela, ou simplement passer dans la longueur de la chaîne: 'result.toString ('utf8', 0, InBUFFER.length)' – mihai

Questions connexes