My temporary (nasty) workaround, as opposed to using set_hook():<br><br><br>        from IPython.Prompts import CachedOutput<br>        oldCall = CachedOutput.__call__<br>        def DisplayHook(*args):<br>            R.gInterpreter.EndOfLineAction() # Update graphics<br>

            return oldCall(*args)<br>        CachedOutput.__call__ = DisplayHook<br><br><div class="gmail_quote">2009/5/27 Peter Waller <span dir="ltr">&lt;<a href="mailto:peter.waller@gmail.com">peter.waller@gmail.com</a>&gt;</span><br>

<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">Dear list,<br><br>I am trying to use IPython with a package called ROOT, and I am having problems with interfering display hooks. ROOT uses sys.displayhook to ensure that graphics are uptodate after a command is run in the interactive prompt. This works fine so long as ROOT is imported after IPython is started up, but if ROOT is imported before IPython, then IPython sets its own display hook. <br>


<br>This wouldn&#39;t be a problem if IPython ran the displayhook no matter what, but it is conditional on whether the thing to be displayed is &#39;None&#39;. If it is none, then the display hooks are not called. Since many of the functions which want to update a graphic display are returning None, my graphics are not being updated.<br>


<br>In IPython version 0.9.1 line 533 of Prompts.py in the __call__ method of CachedOutput, reads &quot;if arg is not None:&quot;, and under that if statement is the statement &quot;manipulated_val = self.display(arg)&quot;. I believe that self.display(arg) should be called even if arg is None, so that displayhooks can be used to update graphics.<br>


<br>Please let me know what you think,<br><br>Regards, <br><font color="#888888"><br>- Peter<br>
</font></blockquote></div><br>