On May 5, 3:44 pm, "Gabriel Genellina" <[EMAIL PROTECTED]> wrote:
> En Mon, 05 May 2008 13:02:12 -0300,skunkwerk<[EMAIL PROTECTED]> escribió:
>
>
>
> > On May 4, 10:40 pm, "Gabriel Genellina" <[EMAIL PROTECTED]>
> > wrote:
> >> En Mon, 05 May 2008 00:33:12 -0300,skunkwerk<[EMAIL PROTECTED]> escribió:
>
> >> > i'm redirecting the stdout & stderr of my python program to a log.
> >> > Tests i've done on a simple program with print statements, etc. work
> >> > fine.  however, in my actual program i get weird output like this:
>
> >> > 2008-05-04 20:20:44,790 DEBUG Grabbing message from queue, if any
> >> > 2008-05-04 20:20:44,790 DEBUG DEBUG:doit:Grabbing message from queue,
> >> > if any
> >> > 2008-05-04 20:20:44,790 DEBUG DEBUG:doit:DEBUG:doit:Grabbing message
>
> >> Try this simplified example and see by yourself:
>
> >> import sys
>
> >> class Write2Log:
> >>      def write(self, x):
> >>          sys.__stdout__.write('[%s]' % x)
>
> >> sys.stdout = Write2Log()
>
> >> print "Hello world!"
> >> age = 27
> >> name = "John"
> >> print "My name is", name, "and I am", age, "years old."
>
> > thanks Gabriel,
> >    i tried the code you sent and got output like the following:
> > [My name is][][john][][and I am][][27][][years old.]
>
> > it doesn't really help me though.  does this have any advantages over
> > the syntax i was using?
> > are there any limits on what kind of objects the logger can write?  ie
> > ascii strings of any length?
>
> The example doesn't use any logger, so loggers aren't the problem here, ok?
>
> The write function above puts square brackets [] around anything it receives. 
> This way you can see exactly how write() is called: once per *item* in the 
> print statement, plus once per comma used (with an space character that you 
> didn't copy correctly).
>
> Back to your original code, you have to call logger.debug with a *line* of 
> text, but you are calling it with many small pieces - that's the problem. 
> Accumulate output until you see a '\n' - then join all the pieces into a 
> single, complete line and finally call logger.debug
>
> --
> Gabriel Genellina

thanks Gabriel,
   i wrote the function below, but am now getting an "Error in
sys.exitfunc:" error (which disappears when i comment out the last two
lines below):

class write2Log:
        def write(self, x):
                if x!=',':#ignore if a comma
                        if str(x).count('\n')==0:
                                buffer += str(x)
                        else:
                                list = str(x).split('\n')
                                logger.debug(buffer)
                                buffer = ""
                                for text in list:
                                        logger.debug(text)

sys.stdout = write2Log()
sys.stderr= write2Log()

any ideas what might be wrong?
thanks again
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to