redirecting stdout to a file as well as screen

SamG mad.vijay at gmail.com
Thu Apr 12 13:57:26 CEST 2007


On Apr 12, 3:42 pm, "Gabriel Genellina" <gagsl-... at yahoo.com.ar>
wrote:
> En Thu, 12 Apr 2007 07:23:43 -0300, SamG <mad.vi... at gmail.com> escribió:
>
>
>
> >> >> > 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).
>
> >> >> class Tee(file):
> >> >>      others = ()
>
> >> >>      def write(self, data):
> >> >>          file.write(self, data)
> >> >>          for f in others:
> >> >>              f.write(data)
>
> >> > This is only creating an out.log file and all the stdout and stderr
> >> > are logged there.
>
> >> Sorry, `for f in others:` should read `for f in self.others:`
>
> > Does not make difference, does this work for you? Im working on linux.
> > But this code looks portable except for the file path :)
>
> Yes. And it's rather similar to your other example... Omit sys.stderr as
> Antoon Pardon suggested.
>
> --
> Gabriel Genellina


Thanks people i have got it working now...

with this program!

#END
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=open('out.log','w')
mc = multicaster([sys.stderr, log_file])
sys.stdout = mc
sys.stderr = mc
sys.stdout.write( "Mojozoox\n")
sys.stderr.write( "Hello\n")
#END

works perfect for my needs.




More information about the Python-list mailing list