2013-03-06 6 views
13

Zum Beispiel willen, ich bin mit dem grundlegendsten WebServer in Knoten (Ich verwende Windows) mit dem folgenden Code (benannt server.js):Anzeige läuft Kind-Prozess -Ausgang in NodeJS (Fenster)

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/'); 

das möchte ich als Kind-Prozess ausgeführt und erfolgreich tue so mit dem folgenden:

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

Allerdings habe ich nichts erhalten, sobald ich die zweite Datei ausführen. Nein "gibt & Fehler aus", nein "Server läuft bei ...". Wenn ich localhost: 1337 in einen Browser eintippe, bekomme ich "Hallo Welt", also weiß ich, dass es läuft. Gibt es eine Möglichkeit, diesen "Server läuft ..." zu leiten, damit ich "sicher" sein kann, dass er zuhört?

Antwort

20

Exec kehrt STDOUT und STDERR, wenn das Kind fertig ist, sehen exec. Deshalb sehen Sie beim Start des Servers keine Ausgabe.

Was Sie wollen, ist fork, die automatisch das Kind Prozess STDOUT und STDERR zu Ihren Eltern verbindet. Dies ist der bevorzugte Weg, wenn Ihr untergeordneter Prozess ein Knotenprozess ist.

Wenn Sie exec verwenden, können Sie das Kind processe Bäche um Daten zu erhalten, zum Beispiel:

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

Fantastisch. Ich hatte Spawn angeschaut, aber ich habe es versäumt, Fork zu betrachten, was genau das zu sein scheint, was ich brauche. – AberZombie

+0

Ist es möglich, die Farbgebung beim Streamen des Kindes zu erhalten? Zum Beispiel führe ich einen weiteren Schluck-Befehl aus, der normalerweise eine schöne farbige Ausgabe hat, aber wenn die zwei Rohre verbunden sind, erscheint die Ausgabe des Kind-Schluckens alle als weiße Zeichen, die die Färbung verlieren. – Corneliu

+1

Ich fand die Antwort: 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 

// Hier finden Sie auf Fenster und ich Rekord stdout und stderr zu meinem 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); 
}); 
Verwandte Themen