Microsoft's IronPython 1.0 (or try IronPython's main website for the latest release) is a release of the Python programming language for the .NET platform. Below are some of the most important of IronPython's 1.0 namespaces and counting:
Please keep in mind that IronPython is written for a CLI platform. I became interested in it after learning about ConceptNet: A Practical Commonsense Reasoning Toolkit
written in Python. I started a C# library class for ConceptNet and needed to trace though it. So I then found myself sidetracked by writing this IronTextBox control for myself. It may be useful to others and it may not. However, it is another small introduction into Microsoft's IronPython.
IronTextBox for IronPython 2
This article's IronTextBox is for IronPython 1.1. For the latest version please see http://www.codeproject.com/KB/miscctrl/irontextbox2.aspx
The TextBox control that I developed to help me understand some unfamiliar python code is IronTextbox. I find it useful to see what IronPython's limits are since it is still in its beta stage. Plus IronPython is staged on a CLI platform and this TextBox control creates more of a non-CLI platform. It currently has three namespaces
UIIronTextBox //(the main IronTextBox and IronTextBoxControl namespace) <BR>UIIronTextBox.Paths //(a class to store common paths for the "paths" command) <BR>UIIronTextBox.Utils //(a misc namespace)<BR>UIIronTextBox.IPEWrapper //(a class to handle PythonEngine stream output
Here is a screen capture of the help menu for IronTextBox 18.104.22.168b
This demo uses a TextBox and UserControl based control that I named IronTextBox. It is to be used with Microsoft's IronPython. There is a bunch of useful methods in Python and IronPython 1.0 does a great job of implementing all of the common ones. Let the record state that I am not an expert at Python nor IronPython but am just learning both at the same time and it is amazing to me the work the IronPython team has done. I created this control to help me evaluate some Python scripts and learn IronPython.
IronPython 1.0 comes with several Console classes but I decided not to use them in this demo because I would have to distribute the classes within the project. Besides, what fun would that be. Also, the IronTextBox can be used as a COM object so anyone may use it to help test their applications. At least that's what I use it for.
I first started out with a TextBox based control then thought a nice color control would be outstanding. I have a very rough draft RichTextBox control still in active development. I may post the project with this article but as I am typing this I have not decided. I had to quit developing the control because I was having coloring problems with strings. I am not that up on my Rtf knowledge so due to me spinning my wheels for a couple of days I decided I was sidetracked and bailed because learning Rtf was not my main goal. So that is why the control in black and white.
I have tried to make the code easy to follow and included as many comments as I could. Therefore, I am time pressed and will not go into depth in this article. Microsoft has plenty of outstanding demos to use, although I understand that it is beta and still does not have much documentation.
Probably the most important thing to know about IronPython's PythonEngine is that it handles Python script by Executing it or Evaluating it. As long as you understand that then learning the rest of IronPython is not that difficult.
In myIronPythonDemo 1.2 try stepping thru some Python code. If you have installed ConceptNet 2.1 (please see my ConceptNet article) click on the "MontyLemmatiser commands" button and this imports MontyREChunker (if your UIIronTextBox.Paths are set correctly) and runs its python method. THIS DEMO WILL ERROR OUT. Set a breakpoint on line 92 in MontyREChunker.py. (you may need to run this first for proper results, as of this writing I am not sure why it does not like to run behind one of the other click events)
Here is a screen shot of Microsoft Visual C# Express 2005 debugging a Python module:
If you download the latest release of the Visual Studio 2005 SDK you may run VS 2005 under it's Experimental Hive which supports IronPython integration. In this mode, it will do Python syntax coloring for you and also auto-indentation.
Below is an incomplete custom MessageBox I wrote to help me debug. It is now located in the UIIronTextBox.Utils namespace.
public void MessageBoxIronPy(Object inobject)
Type itstype = inobject.GetType();
Tuple IPTuple = new Tuple((Tuple)inobject);
Dict IPDict = new Dict();
IPDict = (Dict)inobject;
List IPList = new List();
IPList = (List)inobject;
StringCollection IPSC = new StringCollection();
IPSC = (StringCollection)inobject;
StringEnumerator SCE = IPSC.GetEnumerator();
string output = "";
output += SCE.Current.ToString();
(inobject.GetType().ToString() + " not yet implemented.");
Try using the IronTextBox console after running the first.py demo. When it has completed type "first.hi" at the prompt and then press enter. That executes first's hi method and displays its return value in the IronTextBox.
How to Compile and Execute the Demo Application
- Make Sure you have downloaded and extracted IronPython 1.0 (or try IronPython's main website for the latest release). FYI: I have hardcoded the IronPython script folder to "Environment.SpecialFolder.MyDocuments + @"\Visual Studio 2005\Projects\IronPython-1.0-RC1\Tutorial"" in the project. However, I have implementated an OpenFileDialog to correct any incorrect paths.
- Download and unzip this article's .Net Solution and project files.
- From MS VC# 2005 Solution Explorer, Add a Reference by browsing to IronPython.dll and IronMath.dll located where you extracted the IronPython download.
- ReBuild both projects in the solution by right-clicking on each project (IronTextBox,myIronPythonDemo)and select ReBuild. The demo should now be able to execute.
IronPython is Microsoft's answer to handling Python script. It is a great resource to use. It lead me to develop this control for myself. I didn't put too much time into it, but feel free to build upon it or use it to test your own IronPython applications.
I envisioned version 22.214.171.124b to include a method for browsing to a Python module and running each line through the IronTextBox but I simply ran out of time. I will be implementing this feature and I will update the article at a later date. IronTextBox 126.96.36.199b currently has "btwfi" command to walk thru a python module to see if any errors occur in IronPython.
- Article and IronTextBox version 188.8.131.52b posted.
- Organized namespace UIIronTextBox and made the control Visual Studio ToolBox friendly. Now actually acts like an IronPython console after dropping the control into a Form.
- UIIronTextBox.ConsoleControl is now named UIIronTextBox.IronTextBoxControl
- Transfered irontextboxControl_CommandEntered and GelpHelpText() from the project demo to the IronTextBox control.
- UIIronTextBoxControl now accesses public UIIronTextBox.ConsoleEngine global_eng by calling irontextboxControl_CommandEntered.
- Article project and IronTextBox version 184.108.40.206b uploaded.
- Some cool new IronTextBox commands added like btaf and btwfi added along with 2 new namespaces(see below).
- Added Support for loading a Python .py file line-by-line. eg. WalkPythonFile(string fullpathfilename)
- Added UIIronTextBox.Paths class to store common paths.
- Added UIIronTextBox.Utils for misc use. eg. MessageBoxIronPy(Object inobject)
- Added btaf to IronTextBox's internal commands. Appends a folder by first calling FolderBrowserDialog.
- Added btwfi to IronTextBox's internal commands. Reads a .py line-by-line into IronTextBox by first calling OpenFileDialog.
- Added paths [-arg] - args: -misc, -python24, -ironpython, -all. Appends all hardcoded common paths stored in UIIronTextBox.Paths
- IronTextBox.dll version 220.127.116.11b uploaded.
- Updated the demo application. Now myIronPythonDemo 1.2, supports IronTextBox.dll version 1.1.x
- Added IronTextBox menu screen shot and screen shot of Python file debugging.
- Improved IronTextBox: WalkPythonFile(string fullpathfilename) handles """ and # comments properly.
- Added IronTextBox: DelStmt catch for misc Evaluatations.
- Added IronTextBox command: rew - Re-Write a Python file into a StringBuilder.(for testing).
- Added IronTextBox command: runfile - Run a .Py file. Calls OpenFileDialog to run the module by calling PythonEngine.RunFile.
- BugFix IronTextBox: Misc. IronPython.Compiler.ExprStmt calls getting Evaluated and Executed twice fixed.
- IronTextBox.dll version 18.104.22.168b uploaded.
- Added IronTextBox section to the article.
- Updated the demo application to version 22.214.171.124b.
- Updated IronTextBox.dll to version 126.96.36.199b.
- Updated misc support for IronPython beta8. Many changes to IronPython forced these updates. Previous versions of IronPython are not supported.
- BugFix: IPEStreamWrapper.sbOutput not clearing. submitted by slide_o_mix. Now IPEStreamWrapper.sbOutput clears directly after displaying if it is a misc command in irontextboxControl_CommandEntered().
- Uploaded the demo application with new version of IronTextBox 188.8.131.52b.
- Uploaded IronTextBox.dll to version 184.108.40.206b.
- Updated the demo application to version 220.127.116.11b.
- Updated IronTextBox.dll to version 18.104.22.168b.
- Updated support for IronPython RC1.
- IronTextBox BugFix: 'IronPython.Hosting.EngineModule' does not contain a definition for 'CallerContext'.