2010-09-29 154 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