生成的节点 (.exe) 进程不捕获 stderr 消息

Spawned Node (.exe) process doesnt catch stderr messages

所以我在使用 Node 和生成进程时遇到了一些问题..

我正在生成一个外部 exe 进程:

            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 输出,因为当我 运行 通过命令行执行相同的命令并附加

> stdout.txt 2> stderr.txt

为了将两个流重定向到文本文件,我在 stderr.txt 和 stdout.txt

中都收到了消息

有人知道为什么 stderr 侦听器没有在我的 JS 代码中收到这些消息吗?

好的,所以我终于找到了解决方案..

该应用程序是一个基于 QT 的 C++ 应用程序,具有以下行为:

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

简而言之:通过在节点启动前将 QT_LOGGING_TO_CONSOLE 设置为 1,它会被正确记录。