Intercepting printed strings
Gabriel Genellina
gagsl-py2 at yahoo.com.ar
Fri Sep 19 10:15:55 EDT 2008
En Fri, 19 Sep 2008 10:37:00 -0300, Robert Dailey <rcdailey at gmail.com>
escribió:
> On Fri, Sep 19, 2008 at 4:21 AM, Gabriel Genellina
> <gagsl-py2 at yahoo.com.ar>wrote:
>
>> En Thu, 18 Sep 2008 19:24:26 -0300, Robert Dailey <rcdailey at gmail.com>
>> escribió:
>>
>>
>> I'm currently using Python 3.0 b3 and I'm curious as to how I can go
>> about
>>> intercepting things send to print() for some intermediate processing
>>> before
>>> they're actually sent to sys.stdout. Right now I've thought of the
>>> following:
>>>
>>> Replace sys.stdout with a class named PrintStream. PrintStream is
>>> defined
>>> as
>>> follows:
>>>
>>> class PrintStream:
>>> def write( self, message ):
>>> sys.__stdout__.write( '\t{0}'.format( message ) )
>>>
>>> Will this work? Basically I want to add a tab character in front of
>>> every
>>> message printed. Thanks.
>>>
>>
>> Why don't you try it yourself?
>> You may replace builtins.print with your own function too. It's not
>> exactly
>> the same thing, but given your request "intercepting things send to
>> print()
>> before they're sent to sys.stdout" it may be more adequate.
>
>
> I did try the code I posted and it doesn't work.
Works for me:
p3> class PrintStream:
... def write( self, message ):
... sys.__stdout__.write( '\t{0}'.format( message ) )
...
p3> sys.stdout = PrintStream()
p3> print("Hello world!")
Hello world!
p3> print(1, 2, 3)
1 2 3
(note the double spacing between elements)
You may want to replace the print() function instead (this was not so easy
in previous versions):
p3> sys.stdout = sys.__stdout__
p3> def _print(*args): # simplified print() signature
... sys.stdout.write('\t' + ' '.join(str(arg) for arg in args) + '\n')
...
p3> import builtins
p3> builtins.print = _print
p3> print("Hello world!")
Hello world!
p3> print(1, 2, 3)
1 2 3
p3>
--
Gabriel Genellina
More information about the Python-list
mailing list