So I am having some trouble with Node and spawning processes here..
I am spawning an external exe process as such:
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();
}
});
Problem is that this code only catches the stdout of the process for some reason.. Everything which is outputted over stderr doesnt arrive at the listener.
I know there is stderr output because when I am running the same command over commandline and attach
> stdout.txt 2> stderr.txt
to redirect both streams into a textfile, I am getting messages in both my stderr.txt and stdout.txt
Does anybody have any ideas why the stderr listener is not getting these messages in my JS code ?
Ok, so I finally found the solution..
The application is a QT based C++ app with the following behavior:
Where is located the qDebug qWarning qCritical and qFatal log by default on Qt?
In short: by setting QT_LOGGING_TO_CONSOLE
to 1
before node startup it gets logged correctly.