Analyse la sortie de l'a engendré node.js processus enfant ligne par ligne

J'ai un PhantomJS/CasperJS script sur lequel je suis en cours d'exécution à partir de l'intérieur d'un node.js script à l'aide de process.spawn(). Depuis CasperJS ne prend pas en charge require()ing modules, je suis en train d'imprimer les commandes de CasperJS à stdout puis de les lire à partir de mon node.js script à l'aide de spawn.stdout.on('data', function(data) {});, pour faire des choses comme ajouter des objets à redis/mangouste (alambiquée, oui, mais semble plus simple que d'installer un service web pour cela...) Le CasperJS script exécute une série de commandes et crée de, disons, 20 captures d'écran qui doivent être ajoutés à ma base de données.

Cependant, je ne peux pas comprendre comment briser le data variable (un Buffer?) dans les lignes... j'ai essayé de le convertir à une chaîne et puis en faisant un remplacement, j'ai essayé de faire spawn.stdout.setEncoding('utf8'); mais rien ne semble fonctionner...

Voici ce que j'ai droit maintenant

var spawn = require('child_process').spawn;

var bin = "casperjs"
//googlelinks.js is the example given at http://casperjs.org/#quickstart
var args = ['scripts/googlelinks.js'];
var cspr = spawn(bin, args);

//cspr.stdout.setEncoding('utf8');
cspr.stdout.on('data', function (data) {
    var buff = new Buffer(data);
    console.log("foo: " + buff.toString('utf8'));
});

cspr.stderr.on('data', function (data) {
    data += '';
    console.log(data.replace("\n", "\nstderr: "));
});

cspr.on('exit', function (code) {
    console.log('child process exited with code ' + code);
    process.exit(code);
});

https://gist.github.com/2131204

  • Est-ce la meilleure approche? Il semble que le stdout.on('data') événement se déclenche selon taille de la mémoire tampon, pas nécessairement de nouvelles lignes. Est-ce vrai?
InformationsquelleAutor Jesse Fulton | 2012-03-20