Так меня возникли некоторые проблемы с узлом и нерестовыми процессами здесь ..Отнерестившихся 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-коде?
Один совет: не называйте свою дочернюю переменную процесса 'process', уже существует« глобальный »объект' process', и это может сбить с толку (и может привести к отладке ошибок). – mscdex
Вы пытались сменить обработчик события '' exit'' на обработчик события '' close '? Вы почти всегда должны использовать '' close'', потому что это происходит, когда оба дочерних процесса завершили * и *, когда больше данных не поступит ни на поток stdout, ни на stderr. Данные по-прежнему могут быть получены после события ''exit' '. – mscdex