2012-04-21 7 views
0

J'ai une commande que j'ai besoin d'exécuter trois fois. Il génère beaucoup de sortie sur stdout et prend environ une minute. Une fois les trois commandes terminées, une quatrième commande (différente) doit être exécutée. Un script shell ressemblerait à ceci:nodejs: exécute une commande longue plusieurs fois

#!/bin/sh 
command arg1 arg2 
command arg1 arg2 
command arg1 arg2 
something_else 

Je pensais à l'aide child_process.exec() dans une boucle, mais que les tampons stdout jusqu'à ce qu'il soit terminé (à droite?). J'ai besoin de donner à l'utilisateur des retours immédiats, donc la mise en mémoire tampon de la sortie stdout pendant plus d'une seconde n'est pas une bonne idée. Donc je dois utiliser child_process.spawn() mais la manipulation asynchrone me rend un peu fou. Je pensais à mettre l'appel spawn dans une fonction comme celle-ci:

fucnction myfunc(runs) { 
    if (runs >= 1) { 
     myproc = spawn(...) 
     myproc.on('exit',function() { myfunc(runs - 1) }) 
    } 
} 

ce qui fonctionnerait je suppose. Mais y a-t-il une meilleure façon? Je suis sur les systèmes Unix et peut-être Windows.

Répondre

0

Le module de noeud async a une fonctionnalité qui vous permet de faire tous vos travaux en parallèle dans un seul morceau de code.

Check out async (https://github.com/caolan/async)

vérifier également cluster (http://nodejs.org/docs/latest/api/cluster.html)

Questions connexes