spir wrote:
<snip>


class Out(file):
        def __init__(self, filename, toconsole=True, numberlines=True):
                file.__init__(self, filename, 'r')
                print self
                # debug output to console
                self.toconsole = toconsole
                # line numbering
                self.numberlines = numberlines
                if self.numberlines:
                        self.linenumber = 0
                # save default stdout
                self.console = sys.stdout
        def write(self, msg):
                if self.numberlines:
                        self.linenumber += 1
                        linenumber = "%3d  " % self.linenumber
                else:
                        linenumber = ""
                text = "%s%s\n" %(linenumber, msg)
                self.write(text)
                if self.toconsole:
                        self.console.write(text)
        def close(self):
                # restore default stdout
                sys.stdout = self.console
                # close file
                self.close()



In your call to __init__(), shouldn't the file mode have been "w"  not "r" ?

Aren't those write() and close() methods infinitely recursive? I suspect you meant something like:
       file.write(self, text)       and
       file.close(self)

Also, I'm not really sure what you're doing with self.console versus sys.stdout. Since you "restore" it in close(), I'm assuming you meant to change it at some point in your code. And if you are going to change it, you should flush it first. If you hadn't had the "restore" code, I'd have guessed instead that you were trying to force all the output to go to the original stdout, even if the caller has reassigned it in the meantime.


I didn't actually try your class, but these are problems that jumped out at me.

DaveA

_______________________________________________
Tutor maillist  -  [email protected]
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor

Reply via email to