Я пишу приложение Qt GUI, которое использует библиотеку libxslt. libxslt всегда печатает ошибки в stderr, но в некоторых случаях пользователю было бы полезно видеть эти сообщения отображенными. Есть ли способ перехватить вывод stderr и поместить его в QString?
Есть два быстрых варианта:
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(...);