On 1/8/2010 3:56 PM, Steven D'Aprano wrote:
Unfortunately this won't do what you expect, because sys.ps1 and ps2
should be either strings, or objects with a __str__ method. They aren't
called to generate the prompt.

but their __str__ does get called to generate the prompt.

import sys

class kbInterfaceHelper(object):
     def __init__(self, str_func):
         self.str_func = str_func
     def __str__(self):
         return self.str_func()

class kbInterface(object):
    def __init__(self):
        self.count = 0
    def prompt1(self):
        self.count += 1
        return "[%d]> " % self.count
    def prompt2(self):
        l = len(str(self.count))+1
        return "%s " % "."*l
    def dhook(self, value):
        print "[%d out]" % self.count
    def ehook(self, type, value, trace):
        print "[%d err]\n" % value

kbi = kbInterface()
sys.ps1 = kbInterfaceHelper(kbi.prompt1)
sys.ps2 = kbInterfaceHelper(kbi.prompt2)
sys.displayhook = kbi.dhook
sys.excepthook = kbi.ehook
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to