2014-02-12 5 views
2

Я могу выполнить 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

После редактирования 1: Есть ли причина избежать использования 'SourceCodeKind.Expression'? –

+0

@PawelJasinski Спасибо, я не понял, что это сделал. Я разобрался с ним и наткнулся на http://stackoverflow.com/questions/1966421/get-last-statement-result-in-embedded-ironpython-v2, что было эффективно, что я хотел сделать. Теперь я просто делаю 'object Result = Compiled.Execute (PyScope);' который отлично работает. – Bonzo

ответ

0

можно реализовать объект файла (в этом case вам нужно только написать метод принятия строки) и назначить его sys.stdout.

public class PythonFile { 
    public void write(string s) { 
    } 
} 

и позже:

PyEngine.GetSysModule().SetVariable("stdout", new PythonFile()); 
2

Вы можете PyEngine.Runtime.IO.SetOutput(stream, encoding) направить, что бы перейти на stdout к пользовательскому потоку (см также .SetErrorOutput для stderr и .SetInput для stdin).

Смежные вопросы