Я хочу заменить некоторые встроенные функции внутри кода, который я запускаю с exec
. Это возможно, передав его в виде словарной записи во втором exec
аргументе. Но когда я пытаюсь импортировать модуль внутри исполняемого кода, функции, как в оригинальных bultins, при вызове внутри импортированного модуля.
Это пример того, чего я пытаюсь достичь:
from inspect import cleandoc
def new_print(val):
print('Hello', val)
code_inner = cleandoc("""
def bar():
print('Inner')
""")
with open('inner.py', 'w') as f:
f.write(code_inner)
code_outer = cleandoc("""
import inner
print('Outer')
inner.bar()
""")
exec(code_outer, {'print': new_print}, {})
Это ответ, который я получаю:
Hello Outer
Inner
И вот что я хотел бы иметь:
Hello Outer
Hello Inner
Есть ли способ передать новые глобальные переменные, встроенные функции или список переменных в импортируемый модуль?