IDLE - Customizing output format

Ilias Lazaridis ilias at lazaridis.com
Sat Oct 7 19:59:20 EDT 2006


Ilias Lazaridis wrote:
> IDLE has an output format like this:
>
>  >>> object
> <type 'object'>
>  >>> type
> <type 'type'>
>  >>> object.__class__
> <type 'type'>
>  >>> object.__bases__
>
> How can I customize it to become like that:
>
>  >>> object
>      <type 'object'>
>  >>> type
>      <type 'type'>
>  >>> object.__class__
>      <type 'type'>
>  >>> object.__bases__
>
> or that:
>
>  >>> object
>    : <type 'object'>
>  >>> type
>    : <type 'type'>
>  >>> object.__class__
>    : <type 'type'>
>  >>> object.__bases__
>
> (preferably without modifying code)

I am close to finalizing this task, but have two tiny problems:

import the module from within a site_packages *.pth file, or
include the code into sitecustomize, or
import it withine an IDLE session:

# idlex.py
#---------------------------------------------------------------------------------------
import sys

class ClaimStdOut:
    def __init__(self, stream, prefix):
        self.stdout = stream   #remember original stream
        self.prefix = prefix

    def write(self, output):
        self.stdout.write(self.prefix + output)


#this one is _not_ executed on import:
sys.stdout = ClaimStdOut(sys.stdout, '=== ')

#workaround:
def f(obj):
    if obj is not None:
        print repr(obj)
    # Claiming StdOut here
    sys.stdout = ClaimStdOut(sys.stdout, '::: ')
    #disable displayhook (which is just used to set stdout)
    sys.displayhook = sys.__displayhook__

# this one _is_ executed on import
sys.displayhook = f
#---------------------------------------------------------------------------------------

So, why is this line not executed during import?

sys.stdout = ClaimStdOut(sys.stdout, '=== ')

additionally, the output of IDLE looks like this:

IDLE 1.1.3      ==== No Subprocess ====
>>> 1==1
True
[the new stdout is active now]
>>> 1==1
::: True:::
>>>

Possibly IDLE prints the CR/LF in a second call.

How can I compare this operating-system-independent?

if (output == <os.line-end-marker>):
        self.stdout.write(output)
else:
        self.stdout.write(self.prefix + output)

.

--
http://case.lazaridis.com/ticket/10




More information about the Python-list mailing list