2010-09-29 121 views
2

我有一个问题,我有这样的代码IronPython的脚本从C#代码执行

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> 

现在我想通过ScriptScope.GetItems()集合使用此代码

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

我应该遍历和搜索PythonType对象?

回答

1

我想你只需要调用:

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

否则对有关重定向一个类似的问题一看here

关于在C#中的python类实例化,你的代码似乎是确定,如本question(看看第3个答案)

编辑:

对不起,我没有看过你的问题有足够的重视......

总之,要寻找在Python可用类,只是照你说的,

即是这样的:

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

编辑,对不起:) – digEmAll 2010-09-29 10:39:46

+0

好的,谢谢!我不太了解实例化,当我完全知道什么是类名时,它工作正常。但是,如果客户端使用一些自定义名称来定义自己的自定义类,该自定义名称实现了一些接口(例如,使用一个方法Do()),我想实例化此类并运行此Do()方法,但我无法使用'scope .GetVariable()',因为我不知道类名。 – 2010-09-29 10:46:37

+0

好的,谢谢! :) – 2010-09-29 10:51:02