我正在编写一个使用 libxslt 库的 Qt GUI 应用程序。libxslt 总是将错误打印到 stderr,但在某些情况下,用户查看显示的这些消息会很有帮助。有没有办法捕获标准错误输出并将其放入 QString 中?
问问题
1978 次
1 回答
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(...);
于 2014-05-20T21:23:01.773 回答