<div class="gmail_quote">On 3 November 2011 12:17, Emmanuel Bacry <span dir="ltr">&lt;<a href="mailto:emmanuel.bacry@polytechnique.fr">emmanuel.bacry@polytechnique.fr</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">

<div id=":125">1- I think I understand the solution you suggest. However I don&#39;t hink it<br>
works for me. Let me tell you what ultimately I want to do :<br>
<br>
I wrote a pretty big C++ library for displaying and interacting (using<br>
wxWidget) with scientific plots. It is fast (it is able to manipulate really<br>
long data) and highly interactive.<br>
My goal is to interface it with python so that I can do computations using a<br>
console and a python interpreter in it. E.g, using numpy to compute some<br>
stuff that I display and interact with.<br>
So I want the python interpreter to be ran in the same process as my library<br>
which is using wx so that they share the data.<br>
<br>
I am not so sure this is the case in your solution ?<br>
When you run ipython, there is a python interpreter encapsulated in it right<br>
?<br>
<br>
2- Now wether the console is running in a different process or not is a<br>
different problem.<br>
A priori I don&#39;t care if the console runs in a separate process.. though I<br>
do a little.<br>
Let me explain why :<br>
Sometimes, when dealing with scientific data you want to display huge<br>
quantity of data in the console. You need to have a fast console (look at<br>
matlab console or R, they display a lot of data very quickly).<br>
I&#39;m afraid that sending all the stdout through a socket will be kind of slow<br><br></div></blockquote><div>I don&#39;t think the speed of sending output to the console is a big issue. We use the Qt console for scientific work, and it&#39;s normally quite fast enough, including things like sending base-64 encoded PNGs.<br>

<br>It does make sense, though, that you don&#39;t want to keep sending big objects between two processes. The way we&#39;ve handled this is to have all the data and processing in the &#39;kernel&#39;, and use the frontend simply for input and display. Some version of this approach might work for you, but I don&#39;t know exactly what you&#39;re trying to do.<br>

<br>I think it should be possible to create an InteractiveShell object (from IPython.core.interactiveshell) and use it directly. Some key points:<br><br>Instantiation parameters:<br>config: pass an IPython.config.loader.Config instance to set config values<br>

user_ns: pass a dictionary containing variables which will appear in the user namespace.<br>(these, and all the other parameters are optional - omit them for a default IPython with an empty namespace)<br><br>Methods:<br>
run_cell: Run some code as if it had been typed in at the shell.<br>
push: Pass a dictionary of variables to be added to the IPython namespace.<br>complete: Complete some expression at a prompt (tab completion). See the docstring for details.<br>magic: Run a magic command (see %lsmagic)<br>

<br>Also, the InteractiveShell object has a history_manager attribute which handles input &amp; output history.<br><br>At some point, we should probably make an InteractiveShellProxy class wrapping a kernelmanager so it&#39;s easy to switch between in-process and out-of-process IPython.<br>

<br>Hope that helps,<br>Thomas<br><br><br><br></div></div><br>