Код: Выделить всё
code_str = wrap_input(INPUT_PATH)
x = compile(code_str, INPUT_PATH, 'exec')
sys.settrace(tracer)
exec(x)
sys.settrace(None)
< /code>
Проблема состоит в том, что Tracer выбирает события из обоих: < /p>
Фактический код ввода файла и < /li>
Внешний exec () < /code> Context It.A call encountered in () at line number 0
Line 1 → {'code_str': ..., 'x': }
Line 5 → {'code_str': ..., 'x': , 'foo': }
// File starts here
A call encountered in foo() at line number 1
Line 2 → {}
Line 3 → {'x': 5}
A return encountered in foo() at line number 3
// File ends here
A return encountered in () at line number 5
< /code>
Я заинтересован только в отслеживании того, что на самом деле происходит внутри кода ввода файла < /strong>-не внешняя обертка.if frame.f_code.co_filename != INPUT_PATH:
return None
Вопрос: < /h2>
Как я могу избежать трассировки внешнего исполнителя () < /code>, пока все еще не проходит входным файлом? введен «фактический» код, определяемый пользователем (например, функции во входном файле), а не только оберточный вызов?
Подробнее здесь: https://stackoverflow.com/questions/796 ... -using-sys