redirecting stdout to a file as well as screen

7stud bbxx789_05ss at yahoo.com
Thu Apr 12 05:46:20 EDT 2007


On Apr 12, 3:35 am, "SamG" <mad.vi... at gmail.com> wrote:
> On Apr 12, 12:40 pm, "Ant" <ant... at gmail.com> wrote:
>
>
>
> > On Apr 12, 8:14 am, "SamG" <mad.vi... at gmail.com> 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'
> mc = multicaster([sys.stdout, sys.stderr, log_file])
> sys.stdout = mc
> sys.stderr = mc
>
> print "Hello"
>
> And i get this when i run the porgram.
>
> HelloHelloTraceback (most recent call last):
> Traceback (most recent call last):
>
> Kindly advice!

Try:

log_file = open("out.log", "w")




More information about the Python-list mailing list