python перенос переменных из одного exec в другой

import re
environment, functions = {}, {}
def process(page):
    temp_start = '<python>'
    temp_end = '</python>'
    regex = f"{temp_start}.+?{temp_end}"
    search_result = re.findall(regex, page, re.DOTALL)
    count = len(search_result)
    def get_replace(raw):
        last = raw.pop(-1)
        fname = f'python_script_{count-len(raw)}'
        code = f"def {fname}():\n" + last[len(temp_start):-len(temp_end)]
        
        print(fname)
        exec(code, environment, functions)
        results = functions[fname]()
        print(list(environment.keys()), list(functions.keys()))
        return str(''.join(map(str, results)))

    while True:
        if search_result != []:
            page = re.sub(regex, get_replace(search_result), page, 1, flags=re.DOTALL)
        else:
            break
    return page

Прокомментирую код: на функцию подается текст в котором в рандомных местах появляются секции с кодом

process('''
<python>
    global i
    i = 1
    yield i
</python>
2
<python>
    yield i+2
</python>''')

Я хочу, что бы во время выполнения функции, exec работал внутри environment и functions, что бы я в первом куске кода мог сохранить i, а во втором использовать i вновь. При этом я хочу использовать yield, который потом мне вернет строку, где все подобные блоки будут заменены на результаты yield`ов. От строки выше я ожидаю в результате такой вывод:

1
2
3

Ответы (0 шт):