Hi Stani,<br><br>Really interesting. For your issue can I propose a different approach?<br><br>Have you taken a look at IPython/frontend or IPython/Gui/wx directory?<br>There is various implementation of interface with wx / cocoa for example and I think you will find some interesting things in it. :)<br>
<br>Perhpas I&#39;m out of subjetc but,if I well understood you need control over in/out of ipython because
your terminal is not fully compatible with clasical ipython output.<br>
So perhaps it will be a good idea to use for example
prefilterfrontend.py or (a code that i bettter undersatnd :))
ipshell_nonblocking.py<br>
<br>Just to give you a global idea:<br><br>For example in my case, ipshell_nonblocking.py instanciate ipython0 shell and I feed it via <br><br>self.IP.doExecute(lines_to_execute.encode(ENCODING))<br><br>completion is done like this:<br>
<br>completed, possibilities = self.IP.complete(self.text_ctrl.getCurrentLine()) <br><br>output is redirected to cout class parameter:<br><br> self.IP = WxNonBlockingIPShell(self, &lt;- this is aspecialized WX shell derived from nonblocking one<br>
 cout = self.cout, cerr = self.cout,<br> ask_exit_handler = self.askExitCallback)<br><br> self.text_ctrl = WxConsoleView(self,<br> self.IP.getPrompt(),<br>
 intro=welcome_text,<br> background_color=background_color)<br><br> self.cout.write = self.text_ctrl.asyncWrite<br><br>You can take a look at the code inside these function to see of they works.<br>
<br>I think prefilterfrontend.py will be the starting point you need. (in /fontend/)<br>It is a newer version that will try in the future to follow ipython1 impelmetation.<br>Gael has written it so he is more aware about this.<br>
<br>Using one of these class you&#39;ll be able to feed a ipython instance with your input and get output result more easily.<br>You will not have to go inside the ipython internals becuase they manage this for you.<br>Thus you&#39;ll have full control over your terminal.(if you&#39;ve got access to your terminal display functions, if not all my text above is unusable :) ) <br>
<br>And you&#39;ll be able not to use temporary files ;)<br><br>If you still want to use IPShellEmbeded perhaps __init__ of ipshell_nonblocking.py<br>

can answer some of your question as I felt in almost the same issue..<br>Feel free to ask more queston :)<br><br>Cheers,<br>Laurent<br><br><br><div class="gmail_quote">2009/4/3 Stani <span dir="ltr">&lt;<a href="http://spe.stani.be">spe.stani.be</a>@<a href="http://gmail.com">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;">Hi All,<br>
<br>
As a decent python shell is missing in Blender, I looked for ways to<br>
interact with IPython and Blender. One way is straightforward: just run<br>
in the terminal from which Blender is started. I&#39;ve blogged about it<br>
here:<br>
<a href="http://pythonide.blogspot.com/2009/03/resumable-ipython-inside-blender_31.html" target="_blank">http://pythonide.blogspot.com/2009/03/resumable-ipython-inside-blender_31.html</a><br>
<br>
However in this case IPython takes over the event loop and the Blender<br>
user interface blocked.<br>
<br>
Therefore I tried another approach to run IPython inside a Blender text<br>
window. It took me a bit of digging in the IPython source code, but I<br>
finally manged to create a &#39;IPShellBlender&#39;. Apart from one<br>
inconvenience (position of mouse cursor, nothing related to IPython, but<br>
purely to Blender), this works really nice. It&#39;s fun to rotate or<br>
manipulate 3d objects from the shell. Not everything of IPython is<br>
supported, as I haven&#39;t port readline to the Blender text window.<br>
However most important features are implemented such as (auto<br>
completion).<br>
<br>
I&#39;ve documented everything with Sphinx. Here is a tutorial how to enable<br>
IPython inside any Blender drawing (you need to install my ar package<br>
first):<br>
<a href="http://sd-2469.dedibox.fr/ar/tutorials/ipython.html" target="_blank">http://sd-2469.dedibox.fr/ar/tutorials/ipython.html</a><br>
<a href="http://sd-2469.dedibox.fr/ar/pages/installation.html" target="_blank">http://sd-2469.dedibox.fr/ar/pages/installation.html</a><br>
<a href="http://ar.stani.be" target="_blank">http://ar.stani.be</a><br>
<br>
These are the code documentation:<br>
<a href="http://sd-2469.dedibox.fr/ar/modules/ar.blender.bipython.html" target="_blank">http://sd-2469.dedibox.fr/ar/modules/ar.blender.bipython.html</a><br>
<a href="http://sd-2469.dedibox.fr/ar/modules/ar.blender.bipython.private.html" target="_blank">http://sd-2469.dedibox.fr/ar/modules/ar.blender.bipython.private.html</a><br>
<br>
The actual code can be found in the bipython module (= blender+ipython):<br>
<a href="http://bazaar.launchpad.net/%7Estani/ar/trunk/annotate/head%%0A3A/ar/blender/bipython.py" target="_blank">http://bazaar.launchpad.net/~stani/ar/trunk/annotate/head%<br>
3A/ar/blender/bipython.py</a><br>
<br>
At the moment Blender is working on a major rewrite for Blender 2.5.<br>
We&#39;d like to include IPython as a default shell for IPython. The only<br>
problem is that Blender 2.5 will use python 3.0, which is not yet<br>
supported AFAIK for IPython. On the other hand I&#39;ve only used some core<br>
modules, so maybe they might be available for python 3.0 sooner before<br>
all the extensions (twister, wx, qt, ...)<br>
<br>
As you might be interested, I&#39;ll give some feedback on issues I run in<br>
to. However I run through the IPython code quite quickly to study it, so<br>
I might have done some false presumptions.<br>
<br>
The main modules I used were:<br>
from IPython.Shell import IPShellEmbed<br>
from IPython import ipapi<br>
<br>
1) I was happy to find a complete method in the IPShellEmbed, however it<br>
turned out to be useless. The IP.complete method should have an<br>
(optional) line_buffer argument. Without this many completers wont work<br>
such as the module completer. I think my complete function<br>
complete(self, text, line_buffer) on line 624 would be a good proposal<br>
for an IPython patch.<br>
<br>
2) Output redirection now happens by duplicating stdout and stderr to<br>
temporary files. This is not ideal. Better would be if there was a way<br>
to hook into the IPython Term instance (Term.cout, Term.cerr, ...)<br>
<br>
3) I had to fool IPython in order to force it not to use the readline<br>
module os.environ[&#39;TERM&#39;]=&#39;dumb&#39;<br>
<br>
4)+5) I also needed to be able to clear and rewrite the text windows,<br>
because of two reasons:<br>
- text windows in Blender are a bit primitive so the text can&#39;t scroll<br>
with the cursor. Therefore I needed to be able to display IPython in<br>
reverse (last statement comes first)<br>
- uses might accidently damage the ipython shell<br>
These are shortcomings in the Blender Python API, which will be<br>
addressed in a future version.<br>
<br>
4) Therefore I needed to be able to reconstruct the IPython shell at any<br>
time. Here I faced the difficulty that the prompts can only be generated<br>
for the current statement. A quick hack was to temporarily overwrite the<br>
prompt_count int the output cache, see the IPShellBlender.get_prompt()<br>
method and I needed these core modules to reconstruct prompts:<br>
from IPython.Prompts import str_safe<br>
from IPython.Itpl import ItplNS<br>
<br>
5) The Out list caches the history of the output values. In order to<br>
redraw itself, the stdout string output is needed. Therefore the<br>
IPBlenderShell caches this. If IPython stores this somewhere, Id like<br>
to know.<br>
<br>
I would welcome any feedback on the above four points or on my approach<br>
in general. I&#39;m sure that more experienced IPython developers can hint<br>
many improvements.<br>
<br>
IPython is really the best shell out there, so keep up the great work!<br>
<br>
Stani<br>
<br>
_______________________________________________<br>
IPython-dev mailing list<br>
<a href="mailto:IPython-dev@scipy.org">IPython-dev@scipy.org</a><br>
<a href="http://mail.scipy.org/mailman/listinfo/ipython-dev" target="_blank">http://mail.scipy.org/mailman/listinfo/ipython-dev</a><br>
</blockquote></div><br>