【问题标题】:Redirect PostgreSQL Qt driver stdout/stderr output重定向 PostgreSQL Qt 驱动程序 stdout/stderr 输出
【发布时间】:2016-04-19 10:37:33
【问题描述】:

我目前调用 qInstallMsgHandler() 将所有 Qt 错误、警告和调试输出重定向到我自己的消息处理程序。

这在 99% 的情况下都有效,但是当通过 QSqlQuery 对象执行 SQL 语句时,我仍然会得到以下输出到 stderr:

**WARNING:  nonstandard use of \\ in a string literal

LINE 1: EXECUTE qpsqlpstmt_11 ('<?xml version=''1.0'' encoding=''U

HINT:  Use the escape string syntax for backslashes, e.g., E'\\'.**

数据库是 PostgresSQL 8.4 版。有什么想法可以拦截并重定向此警告吗?

【问题讨论】:

  • 那个警告不是服务器产生的吗?
  • 在我看来它来自 postgres 驱动程序。我在 Qt 的任何地方都看不到它。

标签: c++ postgresql qt qt4.7


【解决方案1】:

Qt 驱动程序正在使用的一些 PostgreSQL 库似乎写入stderr

Yan 可以这样转发stderr

freopen("my_log.txt", "w", stderr);

【讨论】:

  • 谢谢汉克。不幸的是,这也会重定向我的 MessageHandler 中当前正在输出到 stderr 的其他消息(特别是 qFatal 和 qCritical 消息)。我希望尽可能避免这种情况。
【解决方案2】:

对于其他有相同问题的人,您可以使用以下代码禁用警告:

QSqlQuery query(db);
query.exec("SET standard_conforming_strings TO true");

但不幸的是,这意味着调用者隐藏了问题,并且反斜杠在数据库中自动转义,这可能会在以后检索数据时导致问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-22
    • 1970-01-01
    • 1970-01-01
    • 2019-06-14
    • 2022-01-18
    • 1970-01-01
    • 2012-07-14
    • 2016-01-13
    相关资源
    最近更新 更多