2

状況

ホストされた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スクリプトをインポートするにはどうすればよいですか?

4

1 に答える 1

3

サイモンが指摘したように、問題は、のParamName範囲外であるということですSampleScriptWithParamName。これを実現する1つの方法は、次のように組み込み変数のセットに追加することです。

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

これでどこでも利用できるようになるはずですが、今はテストすることができません。

于 2012-12-14T16:59:28.240 に答える