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