2011-07-11 12 views
8

¿Es posible usar node.js para llamar a un script de Perl como un proceso y leer de nuevo stdout línea por línea?node.js llama a un script de perl y obtiene stdout

Estoy bastante seguro de que con javascript normal esto generalmente no es posible, pero un script del lado del servidor que use node.js parece tener algún sentido.

Respuesta

7

Usted podría utilizar nodo integrado en spawn de comandos para la ejecución del proceso hijo y carrier para manejar el procesamiento de línea por línea de stdout:

Instalar:

$ npm install carrier 

Código:

var util = require('util'), 
    spawn = require('child_process').spawn, 
    carrier = require('carrier'), 
    pl_proc = spawn('perl', ['script.pl']), 
    my_carrier; 

my_carrier = carrier.carry(pl_proc.stdout); 

my_carrier.on('line', function(line) { 
    // Do stuff... 
    console.log('line: ' + line); 
}) 
+0

Gracias chicos, parece que podría ser la respuesta. Voy a probar esto. – evolution

6

Sí, busque en spawn/exec.

http://nodejs.org/docs/v0.4.8/api/child_processes.html

var exec = require('child_process').exec; 
exec("perl someperl.pl", function(err, stdout, stderr) { 
    /* do something */ 
}); 

No estoy seguro de por qué no acaba de hacerlo en el nodo.

+0

También tenga en cuenta que esto le devuelve stdout (y stderr) en un blob grande, y no línea por línea. Tendrá que dividir el resultado en el carácter de nueva línea si eso es muy importante para usted. –

Cuestiones relacionadas