我可以用C#执行IronPython:
ScriptSource Source = PyEngine.CreateScriptSourceFromString(Code, SourceCodeKind.InteractiveCode);
CompiledCode Compiled = Source.Compile();
Compiled.Execute(PyScope);
这意味着我可以执行A=1
然后A
。然后输出1
。
有没有办法可以覆盖此行为,因此A
会被重定向到C#函数,比如说CustomPrinter
之前打印?我知道https://stackoverflow.com/a/13871861/1447657可以“重载”print
函数,但我觉得应该有更好的方法。
修改1
感谢您的回答,但我对目标略显不清楚。
我知道我可以使用PyEngine.Runtime.IO.SetOutput(stream, encoding)
重定向输出,但我希望在将输出值转换为字符串之前检索输出值。因此,如果收到A=[1,2,3]
IronPython.Runtime.List
而不是string
,则会收到。
我不确定如果不改变IronPython源代码或使用Regex在A
函数
CustomPrinter.Write
),这是否可行
答案 0 :(得分:2)
您可以PyEngine.Runtime.IO.SetOutput(stream, encoding)
将stdout
的内容指向自定义流(另请参阅.SetErrorOutput
stderr
和.SetInput
stdin
})。
答案 1 :(得分:0)
您可以实现文件对象(在这种情况下,您只需要写入方法接受字符串)并将其分配给sys.stdout。
public class PythonFile {
public void write(string s) {
}
}
以后:
PyEngine.GetSysModule().SetVariable("stdout", new PythonFile());