В настоящее время я делаю следующее, чтобы создать и выполнить простой расчет питона, используя DLR:IronPython DLR; передача параметров в скомпилированный код?
ScriptRuntime runtime = Python.CreateRuntime();
ScriptEngine engine = runtime.GetEngine("py");
MemoryStream ms = new MemoryStream();
runtime.IO.SetOutput(ms, new StreamWriter(ms));
ScriptSource ss = engine.CreateScriptSourceFromString("print 1+1", SourceCodeKind.InteractiveCode);
CompiledCode cc = ss.Compile();
cc.Execute();
int length = (int)ms.Length;
Byte[] bytes = new Byte[length];
ms.Seek(0, SeekOrigin.Begin);
ms.Read(bytes, 0, (int)ms.Length);
string result = Encoding.GetEncoding("utf-8").GetString(bytes, 0, (int)ms.Length);
Console.WriteLine(result);
который печатает «2» на консоль, но;
Я хочу получить результат 1 + 1, не распечатывая его (поскольку это кажется дорогостоящей операцией). Все, что присваивает результат cc.Execute(), равно null. Есть ли другой способ получить полученные переменные из Execute()?
Я также пытаюсь найти способ передачи параметров, т. Е. Результат arg1 + arg2 и не имеет понятия, как это сделать; единственная другая перегрузка для Execute принимает ScriptScope как параметр, и я никогда раньше не использовал python. Может ли кто-нибудь помочь?
[Редактировать] Ответ на оба вопроса: (Desco-х принято как указал мне в правильном направлении)
ScriptEngine py = Python.CreateEngine();
ScriptScope pys = py.CreateScope();
ScriptSource src = py.CreateScriptSourceFromString("a+b");
CompiledCode compiled = src.Compile();
pys.SetVariable("a", 1);
pys.SetVariable("b", 1);
var result = compiled.Execute(pys);
Console.WriteLine(result);