<div>I<span style="background-color:rgb(255,255,255);font-family:Arial,&#39;Liberation Sans&#39;,&#39;DejaVu Sans&#39;,sans-serif;font-size:14px;line-height:18px;text-align:left">&#39;m developing a system in python, and one functionality I need is the ability to have console output go to both the console and a user-specified file. This is replicating the Diary function in MATLAB. I have the following that works perfectly well on both IDLE on windows and python cmdline in ubuntu (this all exists inside a module that gets loaded):</span></div>

<pre style="margin-top:0px;margin-bottom:10px;padding:5px;border:0px;font-size:14px;vertical-align:baseline;background-color:rgb(238,238,238);font-family:Consolas,Menlo,Monaco,&#39;Lucida Console&#39;,&#39;Liberation Mono&#39;,&#39;DejaVu Sans Mono&#39;,&#39;Bitstream Vera Sans Mono&#39;,&#39;Courier New&#39;,monospace,serif;overflow:auto;width:auto;max-height:600px;line-height:18px;text-align:left">

<code style="margin:0px;padding:0px;border:0px;vertical-align:baseline;font-family:Consolas,Menlo,Monaco,&#39;Lucida Console&#39;,&#39;Liberation Mono&#39;,&#39;DejaVu Sans Mono&#39;,&#39;Bitstream Vera Sans Mono&#39;,&#39;Courier New&#39;,monospace,serif">class diaryout(object):
    def __init__(self):
        self.terminal = sys.stdout
        self.save = None

    def __del__(self):
        try:
            self.save.flush()       
            self.save.close()
        except:
            # do nothing, just catch the error; maybe it self was instantiated, but never opened
            1/1
        self.save = None

    def dclose(self):
        self.__del__()

    def write(self, message):
        self.terminal.write(message)
        self.save.write(message)

    def dopen(self,outfile):
        self.outfile = outfile
        try:
            self.save = open(self.outfile, &quot;a&quot;)
        except Exception, e:
            # just pass out the error here so the Diary function can handle it
            raise e

def Diary(outfile = None):# NEW TO TEST
    global this_diary

    if outfile == None:
        # None passed, so close the diary file if one is open
        if isinstance(this_diary, diaryout):
            sys.stdout = this_diary.terminal    # set the stdout back to stdout
            this_diary.dclose()                 # flush and close the file
            this_diary = None                   # &quot;delete&quot; it
    else:
        # file passed, so let&#39;s open it and set it for the output           
        this_diary = diaryout()                 # instantiate
        try:
            this_diary.dopen(outfile)           # open &amp; test that it opened
        except IOError:
            raise IOError(&quot;Can&#39;t open %s for append!&quot;%outfile)
            this_dairy=none                     # must uninstantiate it, since already did that
        except TypeError:
            raise TypeError(&quot;Invalid input detected - must be string filename or None: %s&quot;%Diary.__doc__)   
            this_dairy=none                     # must uninbstantiate it, since already did that
        sys.stdout = this_diary                 # set stdout to it
</code></pre><p style="margin:0px 0px 1em;padding:0px;border:0px;font-size:14px;vertical-align:baseline;background-color:rgb(255,255,255);clear:both;word-wrap:break-word;font-family:Arial,&#39;Liberation Sans&#39;,&#39;DejaVu Sans&#39;,sans-serif;line-height:18px;text-align:left">

Far superior to both IDLE and the plain python cmline, I&#39;m using ipython; herein my problem lies. I can turn on the &quot;diary&quot; perfectly fine with no error <em style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">but</em> the display on the console gets messed. The attached screenshot shows this <img src="http://i.stack.imgur.com/uQl88.jpg" alt="screenshot" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; background-color: transparent; max-width: 640px; ">. The output file also becomes similarly garbled. Everything goes back to normal when I undo the redirection with <code style="margin:0px;padding:1px 5px;border:0px;vertical-align:baseline;background-color:rgb(238,238,238);font-family:Consolas,Menlo,Monaco,&#39;Lucida Console&#39;,&#39;Liberation Mono&#39;,&#39;DejaVu Sans Mono&#39;,&#39;Bitstream Vera Sans Mono&#39;,&#39;Courier New&#39;,monospace,serif">Diary(None)</code>. I have tried editing the code so that it never even writes to the file, with no effect. It seems almost like something is forcing an unsupported character set or something I don&#39;t understand.</p>

<p style="margin:0px 0px 1em;padding:0px;border:0px;font-size:14px;vertical-align:baseline;background-color:rgb(255,255,255);clear:both;word-wrap:break-word;font-family:Arial,&#39;Liberation Sans&#39;,&#39;DejaVu Sans&#39;,sans-serif;line-height:18px;text-align:left">

Anyone have an idea about this?</p><br clear="all">&lt;~~~~~~~~~~~~~~~~~~~~~~~~~~~&gt;<br>J. Andrew Howe, PhD<div>Editor-in-Chief, European Journal of Mathematical Sciences<br>Associate Editor, European Journal of Pure and Applied Mathematics<br>

<a href="http://www.andrewhowe.com" target="_blank">www.andrewhowe.com</a><br>I live to learn, so I can learn to live. - me<br>&lt;~~~~~~~~~~~~~~~~~~~~~~~~~~~&gt;</div><br>