<br><br><div class="gmail_quote">On Mon, Feb 9, 2009 at 10:40 AM, Laurent Dufréchou <span dir="ltr">&lt;<a href="mailto:laurent.dufrechou@gmail.com">laurent.dufrechou@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">









<div link="blue" vlink="purple" lang="FR">

<div>

<p><span style="font-size: 11pt; color: rgb(31, 73, 125);" lang="EN-US">Hi Dan,</span></p>

<p><span style="font-size: 11pt; color: rgb(31, 73, 125);" lang="EN-US">&nbsp;</span></p>

<p><span style="font-size: 11pt; color: rgb(31, 73, 125);" lang="EN-US">From what I've seen of ipython code, seems right for me,
so the idea is to keep sending to sys.stdout &nbsp;because ipython redefine it.</span></p>

<p><span style="font-size: 11pt; color: rgb(31, 73, 125);" lang="EN-US">So, the only problem I see with your code is that you use </span><span lang="EN-US">sys.__stdout__ that always return the python initial stdout and not
the one ipython use.</span></p>

<p><span lang="EN-US">So on your code you where sending your log
to the original stdout without passing by ipython function, that's why
you get the messy output.</span></p>

<p><span style="font-size: 11pt; color: rgb(31, 73, 125);" lang="EN-US">&nbsp;</span></p>

<p><span style="font-size: 11pt; color: rgb(31, 73, 125);" lang="EN-US">Have you tried something like (not tested yet):</span></p>

<p>ipython_sys_stdout = sys.stdout<span style="font-size: 11pt; color: rgb(31, 73, 125);"></span></p>

<p>sys.stdout = multicaster(,&#39;LogFile.txt&#39;, ipython_sys_stdout)</p>

<p>?</p></div></div></blockquote><div><br><br>Laurent, thanks for your message.&nbsp; Unfortunately I think this suggestion doesn&#39;t work.&nbsp; (I did try it, and the same result occurs&nbsp; -- that is, pressing the &quot;up&quot; key gives \[[A, etc....). &nbsp; I also tried using slightly more sophisticated multicaster definition (code included below) which catches all attributes of the old sys.stdout and (except for the &quot;write&quot; method) directs to the to the old one.&nbsp; Even using this, I sitll get the _same_ resulting weird behavior.&nbsp; <br>
<br></div></div>I think that actually sys.stdout and sys.__stdout__ are the same in an ipython session, and that something else is going on.&nbsp;&nbsp; (But i&#39;m not sure what.) <br><br><br><br>class multicaster():<br>&nbsp;&nbsp;&nbsp; def __init__(self,filename,OldObject,New=False):<br>
<div id=":7t" class="ArwC7c ckChnd">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; self.file = filename<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; self.old = OldObject<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if New:<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; F = open(filename,&#39;w&#39;)<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; F.write(&#39;\n\n------------------------------------------------------------------------------------------------------------------------------------------------------\n&#39;)<br>

&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; F.write(&#39;STARTING LOG: &#39; + time.strftime(&#39;%c %Z&#39;) + &#39;\n&#39;)<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; F.write(&#39;------------------------------------------------------------------------------------------------------------------------------------------------------\n\n&#39;)<br>

&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; F.close()<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; def __getattr__(self,name):<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if name != &#39;write&#39;:<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return self.old.__getattribute__(name)<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; def write(self,s):<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; F = open(self.file,&#39;a&#39;)<br>

&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; F.write(s)<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; F.close()&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return self.old.write(s)</div><br>