Добавление штампа времени в Python печати
Я пытаюсь отладить поведение большой библиотеки, от которой я завишу, которая использует разброс (не делайте этого изобилия) операторов debug print через свои многочисленные исходные файлы. Проблема в том, что большинство, если не все из этих операторов печати отладки не содержат отметку даты/времени, поэтому трудно связать сбои на уровне приложения с сбоями в самом коде библиотеки.
Вместо того, чтобы изменять исходный код для всех отладочных принтеров, которые предположительно участвуют в неудача, которую я вижу, я подумал, что может быть возможно обезьяна патч встроенный Python print "function" временно, чтобы все выходные данные были префиксированы с меткой времени.
Поскольку встроенная функцияprint не является функцией в среде Python 2.6, с которой я работаю, я не знаю, возможно ли это. Если кто-то сделал это или достиг аналогичного результата, используя другой крюк в Python, то я был бы благодарен за ваш совет, или даже лучше код для решения проблемы. эта проблема.
2 ответа:
Поскольку вы не можете переопределить функцию
write
(она доступна только для чтения), простой патч обезьяны может выглядеть следующим образом (добавление метки времени к каждой напечатанной строке):old_f = sys.stdout class F: def write(self, x): old_f.write(x.replace("\n", " [%s]\n" % str(datetime.now()))) sys.stdout = F()
Пример будет выглядеть так:
>>> print "foo" foo [2011-02-03 09:31:05.226899]
Альтернативное решение, что отметкой времени является начало (предпослано) вместо конца (приложено):
old_out = sys.stdout class St_ampe_dOut: """Stamped stdout.""" nl = True def write(self, x): """Write function overloaded.""" if x == '\n': old_out.write(x) self.nl = True elif self.nl: old_out.write('%s> %s' % (str(dt.now()), x)) self.nl = False else: old_out.write(x) sys.stdout = St_ampe_dOut()