Я могу выполнить IronPython в C# с:IronPython: Изменение поведения SourceCodeKind.InteractiveCode
ScriptSource Source = PyEngine.CreateScriptSourceFromString(Code, SourceCodeKind.InteractiveCode);
CompiledCode Compiled = Source.Compile();
Compiled.Execute(PyScope);
Это означает, что я могу выполнить A=1
, а затем A
. Затем выдается 1
.
Есть ли способ, которым я могу переопределить это поведение, поэтому A
будет перенаправлен на функцию C#, скажем CustomPrinter
перед печатью? Я знаю, что могу перегрузить функцию print
, как описано https://stackoverflow.com/a/13871861/1447657, но я считаю, что должен быть лучший способ.
Edit 1
Спасибо за ваши ответы, но я был немного неясно, о своих целях.
Я знаю, что могу перенаправить вывод с PyEngine.Runtime.IO.SetOutput(stream, encoding)
, но я хочу получить выходное значение перед тем, как оно было перенесено в строку. Поэтому, если получено A=[1,2,3]
IronPython.Runtime.List
вместо string
.
Я не уверен, если это возможно даже без изменения исходного кода IronPython или с помощью Regex, чтобы обернуть переменные сами по себе (как A
) в функции CustomPrinter.Write
После редактирования 1: Есть ли причина избежать использования 'SourceCodeKind.Expression'? –
@PawelJasinski Спасибо, я не понял, что это сделал. Я разобрался с ним и наткнулся на http://stackoverflow.com/questions/1966421/get-last-statement-result-in-embedded-ironpython-v2, что было эффективно, что я хотел сделать. Теперь я просто делаю 'object Result = Compiled.Execute