2013-03-06 16 views
13

Per esempio amore, sto correndo il server web più fondamentale nel nodo (sto usando Windows) con il seguente codice (denominato server.js):display esecuzione processo figlio uscita in nodejs (finestre)

var http = require('http'); 
     http.createServer(function (req, res) { 
     res.writeHead(200, {'Content-Type': 'text/plain'}); 
     res.end('Hello World\n'); 
     }).listen(1337, '127.0.0.1'); 
    console.log('Server running at http://127.0.0.1:1337/'); 

Vorrei eseguire questo come un processo figlio, e sto facendo con successo così con il seguente:

var exec = require('child_process').exec; 
var serv = exec('node server.js', function(error, stdout, stderr){ 
    console.log('outputs & errors:' + error, stdout, stderr); 
}); 

Tuttavia, ricevo nulla una volta che ho eseguito il secondo file. No "output & errori", no "Server in esecuzione a ...". Se digito localhost: 1337 in un browser, ottengo "Ciao mondo", quindi so che è in esecuzione. C'è un modo per convogliare quel "server in esecuzione ..." così posso essere "sicuro" che stia ascoltando?

risposta

20

Exec tornerà STDOUT e STDERR quando il bambino finisce, vedere exec. Ecco perché non vedi alcun output, quando il server si avvia.

quello che vuoi è fork, che collega automaticamente il processo figlio STDOUT e STDERR al vostro genitore. Questo è il modo preferito se il processo figlio è un processo del nodo.

Se si desidera utilizzare exec è possibile utilizzare i flussi del processe bambino per ottenere i dati, ad esempio:

child.stdout.pipe(process.stdout); 
child.stderr.pipe(process.stderr); 
+0

Fantastic. Avevo guardato la progenie, ma ho trascurato di guardare Fork, che sembra essere esattamente ciò di cui ho bisogno. – AberZombie

+0

È possibile ottenere la colorazione di lavoro durante lo streaming dello stdout figlio? Per esempio sto eseguendo un altro comando gulp che normalmente ha una bella resa colorata, ma quando i due tubi sono collegati, l'uscita dal gulp figlio appare come caratteri bianchi che perdono la colorazione. – Corneliu

+1

Ho trovato la risposta: http://stackoverflow.com/questions/7725809/preserve-color-when-executing-child-process-spawn – Corneliu

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

// Il seguente è su finestre e mi record di stdout e stderr al mio logger

var proc = spawn('cmd.exe', ['/S', '/C', script_path]); 
proc.stdout.on('data', function(data) { 
     logger(logtag, 'proc_stdout: ' + data); 
}); 

proc.stderr.on('data', function(data) { 
    logger(logtag, 'proc_stderr: ' + data); 
}); 
Problemi correlati