重定向PostgreSQL Qt驱动程序stdout / stderr输出

时间:2016-04-19 10:37:34

标签: c++ postgresql qt qt4.7

我目前正在调用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。我有什么想法可以拦截和重定向这个警告吗?

2 个答案:

答案 0 :(得分:1)

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

Yan可以像这样重新stderr

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

答案 1 :(得分:0)

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

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

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