[Python-Dev] Replacement for print in Python 3.0

Simon Percivall s.percivall at chello.se
Mon Sep 5 20:04:07 CEST 2005


On 5 sep 2005, at 18.56, Stephan Deibel wrote:
> On Mon, 5 Sep 2005, Martin Blais wrote:
>
>> However, there is an easy way out: hijack sys.stdout to forward to
>> your logger system.
>> I've got a web application framework that's setup like that right  
>> now,
>> it works great (if you will not need the original print-to-stdout
>> anymore in your program, that is).  I print, it goes to the logfile.
>> You just have to be careful where--in time-- you replace sys.stdout.
>>
>
> Sure, and indeed I've done that often enough but it's kind of ugly and
> doesn't help if you merge bodies of code where some stuff should go to
> a log, some to stdout, some elsewhere.
>
> Hmm, maybe I'd end up avoiding the builtin print() as well, or at
> least need to pass around the stream where I want output.  The general
> problem of not tying code to a particular output stream is what I'm
> reacting to.

Easy, just always print to a file-like object when you think you  
might have
to switch destination later, and control the output from there:


class Out:
     def write(self, text):
         # switch to logging here, or something
         sys.stdout.write(text)

out = Out()

print >>out, "I won't have to change this statement at all!"


Print being a statement or a function doesn't matter in this case.  
Search-
replacing is a bitch either way.

//Simon


More information about the Python-Dev mailing list