Я использую Iron Python для выполнения и отладки python сценариев из проекта C#. Iron Python предоставляет функцию settrace () для отслеживания выполнения каждой python строки.
IronPythonEngine.SetTrace(TracePython);
TracebackDelegate TracePython(TraceBackFrame current_frame, string current_result, object current_payload)
{
// Code
}
Теперь я должен использовать CPython вместо Iron Python. Ниже приведен код, с помощью которого я запускаю python код, используя CPython из C#.
using (Py.GIL())
{
dynamic sys = PythonEngine.ImportModule("sys");
string codeToRedirectOutput =
"import sys\n" +
"from io import StringIO\n" +
"sys.stdout = mystdout = StringIO()\n" +
"sys.stdout.flush()\n" +
"sys.stderr = mystderr = StringIO()\n" +
"sys.stderr.flush()\n";
PythonEngine.RunString(codeToRedirectOutput);
string code =
"a = 6\n" +
"b = 7\n" +
"c = a + b\n" +
"print('This is a Python Example')\n" +
"print(c)\n";
PythonEngine.Exec(code);
string pyStdout = sys.stdout.getvalue();
pyStdout = pyStdout.Replace("\n", "\r\n");
Console.WriteLine(pyStdout);
}
Как реализовать такую же функциональность settrace с использованием CPython двигателя в C#