IronPython脚本从C#代码执行

时间:2010-09-29 09:41:30

标签: c# dynamic ironpython

我有一个问题,我有这样的代码

this._engine = Python.CreateEngine();
ScriptSource source = this._engine.CreateScriptSourceFromString(script.SourceCode);
ScriptScope scope = this._engine.CreateScope();
ObjectOperations operations = this._engine.Operations;
source.Execute(scope);

我正在尝试从教程中执行IronPython代码:

from System.Collections import BitArray
ba = BitArray(5)
ba.Set(0, True) # call the Set method
print ba[0]

所以它正确执行,但我无法理解我是否有print ba[0]为什么它不会将此值输出到控制台?顺便问一下,您能否提供一些关于将IronPython用于应用程序脚本的好文章?

另一个问题是,如果我有一些Python类,我不知道这个类的名称,因为客户端可以手动定义它,是否可以创建此类的实例?例如

class SomeClass(object):
    def some(self, a, b):
        return <something>

现在我正在尝试使用此代码

dynamic SomeClass = scope.GetVariable("SomeClass");
dynamic something = SomeClass();
something.some(x,y);

我应该遍历ScriptScope.GetItems()集合并搜索PythonType个对象吗?

1 个答案:

答案 0 :(得分:1)

我想你只需要打电话:

this._engine.Runtime.IO.RedirectToConsole();

否则请查看有关重定向的类似问题的here

关于C#中的python类实例化,你的代码似乎没问题,如question所示(看第3个答案)

修改

抱歉,我没有充分注意你的问题...

无论如何,要在Python中查找可用的类,只需按照您的说法进行操作,

即。类似的东西:

var availDynClasses = items.Where(x => x.Value is IronPython.Runtime.Types.PythonType);