生成的节点 (.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
,它会被正确记录。
所以我在使用 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
,它会被正确记录。