ich habe ein Problem mit dem Umleiten der Standardausgabe.
Ich habe eine Klasse, die mir das aktuelle Datum vor jede Ausgabe setzen soll (Logging).
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
import codecs
from locale import getpreferredencoding
import os
from time import strftime
import sys
ENCODING = getpreferredencoding()
class Log(object):
'''
Klasse zum Abfangen der print Anweisungen. Umleitung erfolgt wahlweise
in eine Datei, auf die Kommandozeile oder beides.
'''
def __init__(self, logfile = '', rotate = False, cli = True):
self.stdout = sys.__stdout__
self.cli = cli
if logfile:
self.log = True
if rotate:
self.logfile = '%s_%s.log' % (logfile, strftime('%A'))
else:
self.logfile = '%s.log' % logfile
else:
self.log = False
def write(self, *text):
msg = u' '.join(text)
date = strftime('%W %Y-%m-%d %H:%M:%S')
if self.cli:
self.stdout.write('%s %s' % (date, msg.encode(ENCODING)))
if self.log:
logfile = self.logfile
mode = self._check_size(logfile)
try:
f = codecs.open(logfile, mode, 'UTF-8')
f.write('%s %s' % (date, msg))
finally:
f.close()
def _check_size(self, logfile):
if os.path.isfile(logfile):
if os.path.getsize(logfile) > 5000:
return 'w'
else:
return 'a'
else:
return 'w'
if __name__ == '__main__':
sys.stdout = Log('app', True, True)
print u'Logtest öüä'
Code: Alles auswählen
04 2007-01-28 08:58:57 Logtest öüä04 2007-01-28 08:58:57
Wenn ich in Zeile 33 date nicht schreibe
Code: Alles auswählen
self.stdout.write(msg.encode(ENCODING))
Gruß, Whitie