Issue of redirecting the stdout to both file and screen

Peter Otten __peter__ at web.de
Mon May 28 08:10:40 EDT 2007


Gabriel Genellina wrote:

> En Mon, 28 May 2007 06:17:39 -0300, ???????????????
> <kelvin.you at gmail.com> escribió:
> 
>> I wanna print the log to both the screen and file, so I simulatered a
>> 'tee'
>>
>> class Tee(file):
>>
>>     def __init__(self, name, mode):
>>         file.__init__(self, name, mode)
>>         self.stdout = sys.stdout
>>         sys.stdout = self
>>
>>     def __del__(self):
>>         sys.stdout = self.stdout
>>         self.close()
>>
>>     def write(self, data):
>>         file.write(self, data)
>>         self.stdout.write(data)
>>
>> Tee('logfile', 'w')
>> print >>sys.stdout, 'abcdefg'
>>
>> I found that it only output to the file, nothing to screen. Why?
>> It seems the 'write' function was not called when I *print* something.
> 
> You create a Tee instance and it is immediately garbage collected. 

It is not garbage collected until the next assignment to sys.stdout.

Peter




More information about the Python-list mailing list