Я думал, что оператор print
только что вызвал метод .write () для объекта sys.stdout
(по умолчанию).
но написав такой подкласс:
import time
class logfile(file):
def __init__(self, *args, **kwargs):
file.__init__(self, *args, **kwargs)
def write(self, logstr):
if logstr[-1] != '\n': logstr += '\n'
super(logfile, self).write(time.strftime('%D-%T ') + str(logstr))
Кажется, это работает, если я создаю объект logfile
и вызываю метод write
, но при попытке изменить объект sys.stdout
на экземпляр logfile
он выглядит так, как если бы print
isn ' т звонит write
. Может быть writelines
?
Используя это:
#!/usr/bin/python
from myfile import logfile
import sys
sys.stdout = logfile('somefile', 'w')
print 'this is a test'
sys.stdout.write('this is another test')
Мой выходной файл 'somefile' содержит:
this is a test
08/10/11-16:59:47 this is another test
Вы можете видеть, что первая строка в выходном файле - это то, что я пытался print
, а вторая строка - то, что использовалось в sys.stdout.write
Я думал print
только что вызвал метод write
- ясно, что я упускаю что-то базовое.