python — Исключить (или отключить) предупреждения log4cplus при компиляции или запуске приложения PyQT4 GUI?

Я создал небольшое приложение с графическим интерфейсом с помощью QtDesigner на Python и передал это приложение нескольким людям в моей команде, которые используют Autodesk 360 + Autocad.

Мое приложение использует QFileDialog Команда для получения имен файлов, которая, как известно, имеет ошибку при установке Autodesk 360 на компьютере: ссылка 1, link2 .

Ошибка: консоль всегда возвращает следующие ошибки при вызове файлового диалога:

log4cplus:ERROR No appenders could be found for logger (AdSyncNamespace).
log4cplus:ERROR Please initialize the log4cplus system properly.

Ошибка не критична, так как она не меняет обработку, но я не хочу, чтобы какое-либо сообщение об ошибке появлялось таким образом.

Учитывая, что мы часто будем распространять приложение среди людей, ежедневно использующих продукты Autodesk, и что эта ошибка не похожа на то, что будет исправлено в ближайшее время, Можно ли игнорировать эту ошибку, чтобы она не отображалась в консоли? Может быть, игнорируя что-то во время сборки с py2exe… я не знаю, где искать. Спасибо !

4

Решение

Отказ от ответственности: не полный ответ, а расширенный путь к проблеме.

Проблема в том, что хотя бы один из компонентов Autodesk 360, вероятно AdSyncNamespace.dll, использует log4cplus библиотека, но не предоставила правильную конфигурацию для него.

В соответствии с log4cplus: ОШИБКА в python при вызове диалога с файлом tkinter даже @wilx, автор log4cplus, еще не знал еще в 2013 году, как правильно решить проблему.

По умолчанию log4cplus требует файл свойств стиля java для загрузки конфигурации, поэтому, я полагаю, AdSyncNamespace.dll может иметь такую ​​конфигурацию, либо в файле, либо хранится в разделе реестра Windows. Вы можете искать файлы, содержащие log4cplus. строки в папке установки Autodesk и отслеживание доступа к ключам реестра с помощью Посмотрите, какие файлы / ключи реестра доступны приложению в Windows

Конечно, все это может показаться довольно скучным, и вы можете предпочесть более простое решение. Более простым решением было бы перенаправить STDERR вашего приложения в никуда, как описано Вот
или же Вот но это может не подходить для вашей программы, так как она использует консоль для вывода.

Обновить: вы можете попытаться установить переменную окружения LOG4CPLUS_LOGLOG_QUIETMODEзнак равноfalse в вашем приложении или даже глобально, и проверьте, помогает ли это. Также, если вам не нужно STDERR и выполнить все «действительные» выходные данные консоли через STDOUTтогда вы можете попытаться просто закрыть STDERR или перенаправить его на nul как описано в приведенных выше ссылках.

5

Другие решения

Других решений пока нет …