On 2007-04-12, SamG <[EMAIL PROTECTED]> wrote: > On Apr 12, 12:40 pm, "Ant" <[EMAIL PROTECTED]> wrote: >> On Apr 12, 8:14 am, "SamG" <[EMAIL PROTECTED]> wrote: >> >> > How could i make, from inside the program, to have the stdout and >> > stderr to be printed both to a file as well the terminal(as usual). >> >> One way would be to create a custom class which has the same methods >> as the file type, and held a list of file-like objects to write to. >> e.g. >> >> class multicaster(object): >> def __init__(self, filelist): >> self.filelist = filelist >> >> def write(self, str): >> for f in self.filelist: >> f.write(str) >> def writelines(self, str_list): >> #etc >> >> Then assign stdout and stderr to a new instance of one of these >> objects: >> >> mc = multicaster([sys.stdout, sys.stderr, log_file]) >> sys.stdout = mc >> sys.stderr = mc >> >> HTH > > > > I have written this.... > > import sys > > class multicaster(object): > def __init__(self, filelist): > self.filelist = filelist > > def write(self, str): > for f in self.filelist: > f.write(str) > > log_file='out.log'
log_file is not a file but a string, So when you reach the write method in your multicaster you get an atttribute error because a string has no write method > mc = multicaster([sys.stdout, sys.stderr, log_file]) Since sys.stdout and sys.stderr usually both refer to the terminal, this will result in your output appearing twice on the terminal > sys.stdout = mc > sys.stderr = mc Maybe you are better of leaving sys.stderr as it is, at least until you are sure your multicaster itself is working as it should. > print "Hello" -- http://mail.python.org/mailman/listinfo/python-list