我正在编写一个使用libxslt库的Qt GUI应用程序。 libxslt总是向stderr输出错误,但在某些情况下,用户可以看到显示的那些消息。有没有办法捕获stderr输出并将其放在QString中?
答案 0 :(得分:2)
有两种快速选择:
1)使用外部流程包裹您的使用并使用QProcess。
这将引入一个外部包装器。这将不允许您处理错误"有时"离手。你需要一些外部处理。
QProcess process;
process.start("wrapper");
process.waitForFinished();
qDebug() << process.readAllStandardError();
2)根据着名的 Linux编程接口书籍示例:重定向stderr(2)文件描述符。
这有点复杂,但最好避免使用外部进程包装器。它也只是posix兼容,所以没有它可能无法工作。如果你打算使用msvc,这可能是一个显示阻止。您需要单独编写Windows后端或使用mingw。
int pfd[2];
pipe(pfd);
// Do other things here.
close(STDERR_FILENO);
if (pfd[1] != STDERR_FILENO) {
dup2(pfd[1], STDERR_FILENO);
close(pfd[1]);
}
read(...);