Подтвердить что ты не робот

Отобразить запуск дочернего процесса 'в nodejs (windows)

Например, я использую самый простой веб-сервер в node (я использую окна) со следующим кодом (named server.js):

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

Я хотел бы запустить это как дочерний процесс и успешно делаю это со следующим:

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 в браузере, я получаю "привет мир", хотя, поэтому я знаю, что он работает. Есть ли способ передать этот "сервер работает...", чтобы я мог быть "уверен" в его прослушивании?

4b9b3361

Ответ 1

Exec вернет STDOUT и STDERR, когда ребенок закончит работу, см. exec. Вот почему вы не видите какой-либо вывод, когда сервер запускается.

Вы хотите fork, который автоматически связывает дочерний процесс STDOUT и STDERR с родительским. Это предпочтительный способ, если ваш дочерний процесс является node процессом.

Если вы хотите использовать exec, вы можете использовать потоки дочерних процессов для получения ваших данных, например:

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

Ответ 2

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

//Ниже перечислены окна и я записываю 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);
});