2016-09-30 6 views
0

Так меня возникли некоторые проблемы с узлом и нерестовыми процессами здесь ..Отнерестившихся Node (.exe) процесс оленьей кожи ловить сообщения STDERR

Я нерест внешнего процесса еха как таковые:

  var writeStream = fs.createWriteStream(logPath); 

      writeStream.write(new Date().toString() + " : " + type + " : LOG STARTED "); 

      var process = cp.spawn(fileNameExecutable, paramArray, { 
       cwd: pathToExecutable 
      }); 


      process.stdout.on('data', function (data) { 
       writeStream.write(new Date().toString() + " : " + type + " stdout : " + string); 
      }); 

      var errorLog = ""; 
      process.stderr.on('data', function (data) { 
       errorLog += data; 
       writeStream.write(new Date().toString() + " : " + type + " stderr : " + data); 
      }); 

      process.on("exit", function (exitcode) { 
       if (exitcode === 1) { 
        done(new Error(errorLog)); 
       } else { 
        done(); 
       } 
      }); 

Проблема заключается в том, что по какой-то причине этот код только ловит стандартный вывод процесса. Все, что выводится через stderr, не приходит к слушателю.

Я знаю, что есть STDERR выход, потому что, когда я бегу ту же команду над командной строки и прикрепить

> stdout.txt 2> stderr.txt 

перенаправить оба потока в текстовый файл, я получаю сообщения в обоих моих stderr.txt и стандартный вывод. txt

Есть ли у кого-нибудь идеи, почему слушатель stderr не получает эти сообщения в моем JS-коде?

+0

Один совет: не называйте свою дочернюю переменную процесса 'process', уже существует« глобальный »объект' process', и это может сбить с толку (и может привести к отладке ошибок). – mscdex

+0

Вы пытались сменить обработчик события '' exit'' на обработчик события '' close '? Вы почти всегда должны использовать '' close'', потому что это происходит, когда оба дочерних процесса завершили * и *, когда больше данных не поступит ни на поток stdout, ни на stderr. Данные по-прежнему могут быть получены после события ''exit' '. – mscdex

ответ

0

Итак, я наконец нашел решение ..

Приложение представляет собой на основе интервала QT C++ приложение со следующим поведением:

Where is located the qDebug qWarning qCritical and qFatal log by default on Qt?

Короче говоря: путем установки QT_LOGGING_TO_CONSOLE к 1 до того узла он запускается правильно.

 Смежные вопросы

  • Нет связанных вопросов^_^