Routing sys.stdout.write (print)

Justin Sheehy dworkin at ccs.neu.edu
Mon Jul 17 20:10:15 EDT 2000


Joseph Betz <betz at bmi.net> writes:

> I'm getting unexpected results from the following code:
> 
> import sys
> from sys import stdout
> x = stdout
> 
> class Writer
>   def write(self, string):
>     x.write(': ' + string)
> sys.stdout = Writer()
> print "Ni!"
> x.write('Ni!\n')
> 
> The output I'm getting is:
> 
> : Ni!:
> Ni!
> 
> I am looking for a solution so that the second colon isn't in the
> output.  A good solution
> may be very different then the code I have here.

This is due to the implementation of the print statement, which
effectively calls sys.stdout.write a separate time for the trailing
newline.

If you use sys.stdout.write() directly instead of the print statement, 
you won't have this problem.

-Justin

 




More information about the Python-list mailing list