En Fri, 19 Sep 2008 10:37:00 -0300, Robert Dailey <[EMAIL PROTECTED]>
escribió:
On Fri, Sep 19, 2008 at 4:21 AM, Gabriel Genellina
<[EMAIL PROTECTED]>wrote:
En Thu, 18 Sep 2008 19:24:26 -0300, Robert Dailey <[EMAIL PROTECTED]>
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
--
http://mail.python.org/mailman/listinfo/python-list