[IronPython] Embedding IPython Shell into IronPython

Federico Vaggi vaggi at cosbi.eu
Tue Feb 15 10:43:25 CET 2011


  Hey Dave,

thanks a lot for all the help.  Without the tab completion/colour it 
seems like this is a lot of work for a very plain shell, and Sho looks 
like a much better option - I played around with it a fair bit (it seems 
better than the plain IronPython console) but I haven't found much on 
how to embed it yet.  I'll head over to their forums and see if there is 
something I am missing.

Federico

On 11/02/2011 05:09, Dave Wald wrote:
>
> First off, Thanks to all the developers! 2.7b1 and b2 have been 
> excellent so far, at least as far as my current needs go. The new 
> subprocess module is great. Came just in time. Great work!
>
> Federico,
>
> Your post caught my eye, as I also like good embeddable console apps. 
> Hadn't used IPython before so I downloaded it and played with it. 
> Installed the PyReadline library as recommended to get all the command 
> line goodies. Nice.
>
> OK, so then, of course, I had to try it in IronPython, and immediately 
> hit the same issues you did, with almost the exact same traceback 
> info, etc.
>
> So, I fired up the excellent Tools for Visual Studio 2010 and created 
> a little project to embed the shell and call it from my running 
> IPyScratchPad app (with a WinForms dll to house the form) and traced 
> thru it in the Debugger.
>
> Long story short, I found the major issue (and a couple of minor ones) 
> and got it to run.
>
> Now, I'm pretty sure Readline has not been ported to IronPython yet, 
> and you know it requires pywin32. So that is not going to run under 
> IronPython.
>
> But the rest of it seems to be working ok. No tab completion or 
> colorization but...
>
> Here's what I did (ultimately) to get it to run:
>
> First of all, copied the whole IPython folder structure over under 
> "C:\Program Files (x86)\IronPython 2.7\Lib\site-packages".
>
> I created a new Scripts folder under "C:\Program Files 
> (x86)\IronPython 2.7", as IPython creates under Python 2.6.
>
> Copied the following two files into it:
>
> "C:\Python26\Scripts\ipython.py"
>
> "C:\Python26\Scripts\ipython.bat"
>
> Modified ipython.bat file to read:
>
> cd "C:\Program Files (x86)\IronPython 2.7"
>
> ipy.exe -X:Frames .\Scripts\ipython.py %*
>
>  Double-clicking the bat file will now start up the IPython console 
> running in IPy.exe.
>
>  Notice the " -X:Frames " option specified. That is the major key to this.
>
> Turns out, IronPython does not enable sys._getframe by default, which 
> is required by IPython.
>
> Note (from the Python doc):
>
> sys._getframe([depth])
>
> Return a frame object from the call stack. If optional integer depth 
> is given, return the frame object that many calls below the top of the 
> stack. If that is deeper than the call stack, ValueError is raised. 
> The default for depth is zero, returning the frame at the top of the 
> call stack.
>
> CPython implementation detail: This function should be used for 
> internal and specialized purposes only. It is not guaranteed to exist 
> in all implementations of Python.
>
>
> Found a post on StackOverflow, with a reply by Jeff Hardy about this, 
> which is what tipped me off. Thanks Jeff!
>
> http://stackoverflow.com/questions/3780379/how-can-i-enable-sys-getframe-in-ironpython-2-6-1
>
>  OK, so far so good.
>
> Now. Embedding...
>
>  I used the simplest example in the IPython manual pdf, in section 
> "3.2.4 Embedding IPython" on page 32-33.
>
> I placed the following code into my app, in a button-click event handler.
>
> def testIPyShell(self, sender, event):
>
> from IPython.Shell import IPShellEmbed
>
> args = ['-colors','NoColor','-noreadline','-classic','-x','Verbose']
>
> ipshell = IPShellEmbed(args)
>
> ipshell()
>
> In the Project Properties page, I set "Command Line Arguments" to   
> -X:Frames    and Interpreter Path to    C:\Program Files 
> (x86)\IronPython 2.7\ipy.exe
> (which is now 2.7b2) and check the "Debug Standard Library" box.
>
> Hit F5, click the button and it works. The shell starts up. Main app 
> blocks on it, tho. Hmmm. Well, may be a way around that too.
>
> But it starts up and runs. Type "%magic" or "?" and it prints out all 
> the doc, etc. Shell commands seem to work ok.
>
> There is a minor issue in file iplib.py, line 646:
>
> self.usage_min = """\
>
> where it continues a multi-line string. The trailing back irritates 
> the VS2010 Debugger to where it gets out of sync with the code.
>
> I just took it out. If you're not running the debugger, you probably 
> won't ever notice it.
>
> If you ARE running the VS2010 debugger, you will get all kinds of 
> stoppages, anywhere anything is raised. And it does that a lot.
>
> Just ignore them. Hit the continue button.
>
> And that's about it. Pretty cool little console.
>
> All that having been said, of course, I think there may be an even 
> better option. Possibly.
>
> Check this out: 
> http://lists.ironpython.com/pipermail/users-ironpython.com/2011-January/014218.html
>
> Curt Hagenlocher posted this a couple of weeks ago. "Sho" is an 
> IronPython shell from MS Research Labs. Played with it some. It's 
> pretty cool. Very geared towards math/science/engineering apps.
>
> The doc says it can be "embedded", but from what I have read (haven't 
> tried it yet), it looks like you can call into it and use it's code 
> and libraries of course, but I don't think the console will pop up. 
> Don't know for sure. Need to play with it and see. That's next.
>
> (Also, downloaded SilverShell http://code.google.com/p/silvershell/ 
> (written in IronPython and WPF) coupla weeks ago and got it running 
> under 2.7 - it's nice, but... seems to have some issues. I think I 
> like Sho better for simplicity and raw power. You might give 'em a try 
> and see which works better for you.)
>
>
> That's all for now. Have fun with IPython. Holler if you have any 
> questions.
>
>  Dave
>
>
> _______________________________________________
> Users mailing list
> Users at lists.ironpython.com
> http://lists.ironpython.com/listinfo.cgi/users-ironpython.com

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/ironpython-users/attachments/20110215/10528df6/attachment.html>


More information about the Ironpython-users mailing list