Для регистрации стандартного вывода вы можете использовать оболочку stdout, такую как эта:
from __future__ import with_statement
class OutWrapper(object):
def __init__(self, realOutput, logFileName):
self._realOutput = realOutput
self._logFileName = logFileName
def _log(self, text):
with open(self._logFileName, 'a') as logFile:
logFile.write(text)
def write(self, text):
self._log(text)
self._realOutput.write(text)
Затем вам нужно инициализировать его в вашем основном файле Python (тот, который запускает все):
import sys
sys.stdout = OutWrapper(sys.stdout, r'c:\temp\log.txt')
Что касается регистрации исключений, проще всего обернуть MainLoop
метод wx.App в try..except, затем извлечь информацию об исключении, каким-то образом сохранить ее, а затем повторно вызвать исключение. до raise
, например:
try:
app.MainLoop()
except:
exc_info = sys.exc_info()
saveExcInfo(exc_info) # this method you have to write yourself
raise