Skip to content Skip to sidebar Skip to footer

Terminating An Ironpython Script

This may not specifically be an IronPython question, so a Python dev out there might be able to assist. I want to run python scripts in my .Net desktop app using IronPython, and wo

Solution 1:

It seems that it's not possible to terminate a running script - at least not in a "friendly" way. One approach I've seen is to run the IronPython engine in another thread, and abort the thread if you need to stop the script.

I wasn't keen on this brute-force approach, which would risk leaving any resources used by the script (e.g. files) open.

In the end, I create a C# helper class like this:-

publicclassHostFunctions
{
    publicbool AbortScript { get; set; }

    // Other properties and functions that I want to expose to the script...
}

When the hosting application wants to terminate the script it sets AbortScript to true. This object is passed to the running script via the scope:-

_hostFunctions = new HostFunctions();
_scriptScope = _engine.CreateScope();
_scriptScope.SetVariable("HostFunctions", _hostFunctions);

In my scripts I just need to strategically place checks to see if an abort has been requested, and deal with it appropriately, e.g.:-

for i in range(100):
    print 'doing something'
    time.sleep(1)
    if HostFunctions.AbortScript:
        cleanup()

Post a Comment for "Terminating An Ironpython Script"