gpt4 book ai didi

c++ - 如何将标准输出重定向到标准错误

转载 作者:行者123 更新时间:2023-12-01 14:47:19 25 4
gpt4 key购买 nike

我正在使用一个也使用 JavaScript 的 C++ QT 应用程序。在 C++ 中,我使用 qDebug 函数并使用 qInstallMessageHandler 捕获所有数据。
这将捕获定向到 stderr 的所有内容。在 JavaScript 中,我使用 console.info 将数据写入标准输出。
我想要做的是将 stdout 重定向到 stderr,以便由 console.info 写入的所有消息发现它们进入同一个消息处理程序。

void qDebugMsgHandler(QtMsgType type, const QMessageLogContext& context, const QString& strMsg) {
QString strOutput;

if ( context.file ) {
strOutput += QString(context.file);

if ( context.function ) {
if ( context.line > 0 ) {
strOutput += QString(" L%1").arg(context.line, 8, 10, QChar('0')) + QString(":");
}
strOutput += QString(context.function);
}
}
if ( strMsg.length() > 0 ) {
if ( strOutput.length() > 0 ) {
strOutput += ": ";
}
strOutput += strMsg;
}
switch( type ) {
case QtDebugMsg:
fprintf(stderr, " Debug:%s\n", strOutput.toLatin1().data());
break;
case QtInfoMsg:
fprintf(stderr, " Info:%s\n", strOutput.toLatin1().data());
break;
case QtWarningMsg:
fprintf(stderr, " Warning:%s\n", strOutput.toLatin1().data());
break;
case QtCriticalMsg:
fprintf(stderr, "Critical:%s\n", strOutput.toLatin1().data());
break;
case QtFatalMsg:
fprintf(stderr, " Fatal:%s\n", strOutput.toLatin1().data());
break;
}
fflush(stderr);
}

最佳答案

您可以使用 ios::rdbuf .
例子:

#include <iostream>

int main() {
std::cout << "to stdout\n";
std::cout.rdbuf(std::cerr.rdbuf());
std::cout << "to stderr\n";
}

关于c++ - 如何将标准输出重定向到标准错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62930244/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com