2013-09-16 4 views
5

Пробовал выяснять, как получить py2exe для обработки ошибок более изящно. Есть в основном 2 странные вещи происходят:перенаправление обработки ошибок py2exe

1) Всплывающее сообщение после закрытия программы => хотите подавить (не появляются) это всплывающее окно

2) Файл журнала получение создан в C: \ Program Files \ AppName \ AppName.exe.log (иногда с ошибками разрешения писать в эту папку) => перенаправляют журнал в C: \ Programdata

Я имею в виду, что я могу просто помещать код в неправильном месте и py2e xe bootstrap code стреляет ПОСЛЕ Я установил их, но я не уверен. Я пытался поставить этот код прямо перед журналом ошибок генерации, но он все еще идет туда, где py2exe является развернув их (объекты) Stderr


Структура моей программы выглядит следующим образом

src/ 
    python/ 
    gui/ 
     __main__.py 

главный .py

if __name__ == "__main__": 
    # Redirect py2exe log to somewhere else if windows 
    if hasattr(sys,"frozen") and sys.frozen in ("windows_exe", "console_exe"): 
     stdout_file = "c:\ProgramData\AppName\out.log" 
     stderr_file = "c:\ProgramData\AppName\err.log" 
     sys.stdout = open(stdout_file, "w") 
     sys.stderr = open(stderr_file, "w") 
    try: 
     gui = AppNameGui() 
     gui.main() 
    except: 
     traceback.print_exc() 

ответ

4

это старый пост, но все же, кто-то может найти его под рукой. Вы можете отключить этот досадный всплывающее окно с помощью распространения регистратора множества

logger.propagate = False 

Причина заключается в том, что регистратор не распространяются вывода на консоль. Для получения более подробной информации проверить исходный код пакета py2exe:

py2exe\boot_common.py 
1

У меня были проблемы, когда один из import с неправильно собирался на самом верху моего файла. Мне пришлось перенести перенаправление stdout/stderr прямо вверху файла, чтобы гарантировать, что журналы не создавались так, как хотел бы py2exe.

Смежные вопросы