Как сообщать об ошибках на ранней стадии в приложении wxpython с замороженным py2app на OSX,

Я использую py2app, чтобы заморозить приложение Python, чтобы я мог распространять его под OSX.

Для Windows я использую bbfreeze, и у него есть возможность сказать «держите консоль под рукой». Это очень полезно в ситуациях отладки, для обнаружения исключений на раннем этапе запуска приложения на компьютере пользователя, на котором не установлен python.

Мне нужно знать, как это сделать для py2app в OSX.

Я пробовал wx.App (True), но созданное таким образом окно не остается открытым.

Как я могу построить свое приложение wxpython таким образом, чтобы я всегда мог видеть любые сообщения об ошибках, которые могут возникнуть при запуске ...

Спасибо!


person GreenAsJade    schedule 27.12.2013    source источник


Ответы (1)


В документации для py2app описано, как показать консоль. См. Следующее:

Обычно мне не нужно командное окно в моих приложениях, когда я помещаю их на клиентскую машину. Обычно это раздражает клиента. Вместо этого я бы создал файл журнала, используя модуль ведения журнала Python. Вы можете создать объект регистратора перед вызовом кода wxPython и просто передать регистратор. Примерно так:

frame = MyFrame(logger)

Затем вы можете перехватывать сообщения об ошибках и записывать их в файл журнала. Чтобы файл журнала не стал слишком большим, я бы рекомендовал создать ротационный журнал. Дополнительную информацию см. В документации:

Также, похоже, есть еще один способ создания пакетов приложений на Mac, о котором я никогда не слышал. Он называется Platypus. Возможно, вы тоже захотите это проверить.

person Mike Driscoll    schedule 30.12.2013
comment
Да, обычно не нужно командное окно на клиентской машине. Однако я пытаюсь понять, как поймать stderr, когда есть проблема. В Windows это оказалось командным окном там ... в нем появляется stderr. Как вы говорите, когда wx запущен, достаточно легко убедиться, что они видят какие-либо ошибки. Проблема в том, что что-то пойдет не так до того, как wx заработает. Я пробовал перенаправить stderr: f = open (errors.txt, w); sys.stderr = f; barf; Но никакой радости от этого: он работает под Windows, но на Mac я не получаю трассировку от 'barf' в errors.txt в замороженном приложении. - person GreenAsJade; 31.12.2013
comment
Вот почему я рекомендую использовать модуль логирования. Вы можете обернуть проблемное место с помощью try / except, а затем в исключении вы можете сделать это: mylogger.exception (Произошло исключение!). Модуль регистрации запишет ваше собственное сообщение И обратную связь в файл журнала. - person Mike Driscoll; 31.12.2013
comment
Все, что вы сказали, верно. Спасибо ... это меня перебило! (Даже базовый совет перечитать, как показать консоль на Mac, да!) - person GreenAsJade; 04.01.2014