2012-12-14 26 views
2

形勢託管IronPython的:包含自定義函數

託管IronPython的允許開發人員設置參數爲腳本導入文件。每次創建一個IPy引擎對象時,我都會設置這樣一個參數(ParamName),但是當我嘗試導入使用我的自定義參數的python模塊時,我得到一個帶有「全局名稱」參數的異常「ParamName」定義」。

代碼示例

class PythonScriptingEngine 
{ 
    private ScriptEngine pyEngine; 
    private ScriptScope pyScope; 

    public PythonScriptingEngine() 
    { 
     pyEngine = Python.CreateEngine(); 
     pyScope = pyEngine.CreateScope(); 
    } 

    public object Run(string script) 
    { 
     ScriptSource source = pyEngine.CreateScriptSourceFromString(script); 
     CompiledCode compiled = source.Compile(); 
     return compiled.Execute(pyScope); 
    } 

    public void SetParameter(string name, int value) 
    { 
     pyScope.SetVariable(name, value); 
    } 
} 

// execution 
var engine = new PythonScriptingEngine(); 
engine.SetParameter("ParamName", 10); 
engine.Run(@"import SampleScriptWithParamName"); 

問題

有任何解決方法,以這種情況呢?如何導入使用自定義參數的python腳本?

+0

您能否提供一些源代碼片段以闡明您正在嘗試完成的內容?你是否在範圍上設置了一個變量,通過範圍啓動一些腳本文本並從該腳本文本導入另一個模塊? –

+0

我在範圍上設置了一個變量,然後我試圖導入使用這個變量的* .py文件。 – CaptainRR

+0

請看Q:http://stackoverflow.com/q/3400525和A:http://stackoverflow.com/a/3400652/468244。我認爲你的問題是非常相似和更多的蟒蛇比蟒蛇相關。 –

回答

3

正如Simon指出的那樣,問題是ParamName不在SampleScriptWithParamName的範圍內。實現的方法之一就是將其添加到組內置變量,像這樣:

public void SetParameter(string name, int value) 
{ 
    pyEngine.GetBuiltinModule().SetVariable(name, value); 
} 

這應該讓它隨處可見,但我沒有,現在來測試它的能力。

+0

Thx爲您的答案! – CaptainRR