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 -- http://mail.python.org/mailman/listinfo/python-list