代码之家  ›  专栏  ›  技术社区  ›  jeroenh

从字符串创建Ironpython(动态)对象

  •  2
  • jeroenh  · 技术社区  · 15 年前

    假设我有一个python脚本“calculator.py”:

    def Add(x,y) :
        return x + y;
    

    我可以这样实例化一个动态对象:

    var runtime = Python.CreateRuntime();
    dynamic calculator = runtime.UseFile("calculator.py");
    int result = calculatore.Add(1, 2);
    

    有没有一种同样简单的方法从内存中的字符串实例化计算器?我想得到的是:

    var runtime = Python.CreateRuntime();
    string script = GetPythonScript();
    dynamic calculator = runtime.UseString(script); // this does not exist
    int result = calculatore.Add(1, 2);
    

    其中getpythonscript()可以是这样的:

    string GetPythonScript() {
       return "def Add(x,y) : return x + y;"
    } 
    
    2 回复  |  直到 12 年前
        1
  •  4
  •   Dino Viehland    15 年前

    你可以做到:

    var engine = Python.CreateEngine();
    dynamic calculator = engine.CreateScope();
    engine.Execute(GetPythonScript(), calculator);
    
        2
  •  2
  •   chtenb    12 年前

    这样做:

    public string Evaluate( string scriptResultVariable, string scriptBlock )
    {
        object result;
    
        try
        {
            ScriptSource source = 
                _engine.CreateScriptSourceFromString( scriptBlock, SourceCodeKind.Statements );
    
            result = source.Execute( _scope );
        }
        catch ( Exception ex )
        {
            result = "Error executing code: " + ex;
        }
    
        return result == null ? "<null>" : result.ToString();
    }