Поддержка sys._getframe в IronPython.

Август 6, 2009 – 1:25 пп

При использовании чисто специфических модулей для Python модулей (например, inspect) в реализации IronPython возникают определенного рода проблемы – магическим образом пропадает функция _getframe в модуле sys. Однако когда нельзя, но очень хочется, то можно…

В первые на данную особенность пришлось наткнутся при использовании Eclipse 3.5 + Pydev 1.4.7 в качестве IDE для IronPython 2.6 Beta2 – во встроенной консоли в Eclipse функция sys._getframe имелась, а при обычном запуске приложений она пропадала и импорт модуля inspect и некоторых других вызвал ошибку. При внимательном рассматривании опций запуска вcтроенной консоли было выяснено, что интерпретатор в запускается с опцией -X:Frames. В консольной справке IronPython честно было написано:

Консольная справка

После включения данной опции все начало работать как пологается. Однако проблемы на этом не закончились – в текущем проекте мы используем DLR в качестве кастомизации различных процессов и включение опции было также необходимо при использовании встроенного варианта IronPython. Рысканье по форумам и различным блогам ни к чему не привели. Выручил нас Curt Hagenlocher (мантейнер в проекте IronPython) в рассылке на codeplex.com, описав как можно включать различные опции описанные в консольной справке. Таким образом код для создания движка IronPython с включенной опцией “-X:Frames” выглядит так:


var langSetup = new ScriptRuntimeSetup();
langSetup.Options.Add("Frames", ScriptingRuntimeHelpers.True);
var scriptEngine = new ScriptRuntime(langSetup).GetEngine("IronPython");



Добавить комментарий: