Вы можете сделать что-то подобное, если вы хотите вычислить выражение несколько раз, или просто присвоить результат переменной, если вам нужно оценить его только один раз.

тоящее время я делаю следующее, чтобы создать и выполнить простое вычисление Python с использованием 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 (), является нулевым. Есть ли другой способ получить результирующие переменные из Execute ()?

Я также пытаюсь найти способ передачи параметров, т. Е. Результат - arg1 + arg2, и я не знаю, как это сделать; единственная другая перегрузка для Execute принимает ScriptScope в качестве параметра, и я никогда раньше не использовал python. Кто-нибудь может помочь?

[Править] Ответ на оба вопроса: (Деско принимает, как указал мне в правильном направлении)

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);

Ответы на вопрос(2)

Ваш ответ на вопрос