2013-03-06 17 views
13

Na przykład miłość, Biegnę najbardziej podstawowe WEBSERVER w węźle (używam okien) z następującego kodu (nazwany server.js):Wyświetlacz uruchomiony proces dziecko wyjście w nodejs (Windows)

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

chciałbym uruchomić to jako procesu potomnego, a ja z powodzeniem robi to z następujących powodów:

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

jednak otrzymam nic raz uruchomić drugi plik. Brak "wyjścia & błędów", "Serwer działający na ...". Jeśli wpiszesz localhost: 1337 w przeglądarce, otrzymuję "hello world", więc wiem, że to działa. Czy istnieje sposób na potkanie tego "serwera działającego ...", więc mogę być "pewny", że nasłuchuje?

Odpowiedz

20

Exec powróci STDOUT i STDERR gdy dziecko kończy patrz exec. Dlatego nie widać żadnych danych wyjściowych po uruchomieniu serwera.

Co chcesz jest fork, który automatycznie łączy proces potomny STDOUT i STDERR do rodzica. Jest to preferowany sposób, jeśli proces potomny jest procesem węzła.

Jeśli chcesz użyć exec można używać strumieni processe podrzędnego, aby uzyskać dane, np:

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

Fantastyczny. Spojrzałem na spawn, ale zaniedbałem patrzenia na Fork, który wydaje się być dokładnie tym, czego potrzebuję. – AberZombie

+0

Czy jest możliwe, aby kolorowanie działało podczas przesyłania strumieniowego dziecka na standardowe wyjście? Na przykład wykonuję kolejną komendę gulp, która zwykle ma ładną barwę, ale kiedy te dwie rury są połączone, wyjście z dziecięcego łykania pojawia się jako białe znaki tracące koloryt. – Corneliu

+1

Znalazłem odpowiedź: 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 

// Poniżej znajduje się na oknach i rekordowym I stdout i stderr do mojego rejestratora

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); 
}); 
Powiązane problemy