Отображение вывода запущенного дочернего процесса в nodejs (windows)
например, я запускаю самый простой веб-сервер в узле (я использую windows) со следующим кодом (с именем server.в JS):
var http = require('http');
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello Worldn');
}).listen(1337, '127.0.0.1');
console.log('Server running at http://127.0.0.1:1337/');
Я хотел бы запустить это как дочерний процесс и успешно делаю это со следующим:
var exec = require('child_process').exec;
var serv = exec('node server.js', function(error, stdout, stderr){
console.log('outputs & errors:' + error, stdout, stderr);
});
однако я ничего не получаю после запуска второго файла. Нет "выходы и ошибки", нет " сервер работает на...". Если я набираю localhost: 1337 в браузере, я получаю "hello world", поэтому я знаю, что он работает. Есть способ передачи этого " сервер работает...- чтобы я был уверен, что он слушает?
2 ответов
Exec вернется STDOUT
и STDERR
когда ребенок закончит, см. exec
. Вот почему вы не видите никаких выходных данных при запуске сервера.
что вы хотите fork
, который автоматически соединяет дочерний процесс STDOUT
и STDERR
к вашему родителю. Это предпочтительный способ, если ваш дочерний процесс является процессом узла.
если вы хотите использовать exec, вы можете использовать дочерний процесс потоки для получения данных, например:
child.stdout.pipe(process.stdout);
child.stderr.pipe(process.stderr);
var child_process = nw.require('child_process');
var spawn = child_process
/ / следующее находится в windows, и я записываю stdout и stderr в свой регистратор
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);
});