Я создал небольшое приложение с графическим интерфейсом с помощью 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
… я не знаю, где искать. Спасибо !
Отказ от ответственности: не полный ответ, а расширенный путь к проблеме.
Проблема в том, что хотя бы один из компонентов 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
как описано в приведенных выше ссылках.
Других решений пока нет …