如何实现可靠的逐单元格Python执行器?多IPython shell共存方案咨询
思路合理性说明
你当前的实现思路存在问题:get_ipython()的作用是获取当前进程内的全局IPython实例,同一进程中默认只会存在一个活跃的全局IPython shell,重复调用该方法只会返回同一个实例,未初始化时调用甚至会返回None,自然无法拿到第二个独立的shell实例。
多独立IPython shell实现方案
你可以直接手动实例化InteractiveShell类得到完全独立的IPython shell实例,每个实例拥有独立的命名空间,执行代码互不干扰,参考实现如下:
from IPython.core.interactiveshell import InteractiveShell from IPython.utils.io import capture_output # 实例化两个完全独立的IPython shell ip1 = InteractiveShell() ip2 = InteractiveShell() def run_cell(ip, cmd): with capture_output() as io: # 执行代码单元格 run_result = ip.run_cell(cmd) stdout_content = io.stdout print('执行输出:', stdout_content) return run_result, stdout_content # 测试命名空间隔离 run_cell(ip1, 'x = 100; print(f"ip1中x的值:{x}")') run_cell(ip2, 'x = 200; print(f"ip2中x的值:{x}")') run_cell(ip1, 'print(f"再次读取ip1中x的值:{x}")')
运行后你会看到两个实例的变量x完全独立,不会互相影响。
额外建议
如果你的应用允许用户输入任意代码执行,更推荐将代码执行逻辑放到独立子进程中运行,额外增加超时控制、权限限制,避免恶意代码破坏主应用进程或者窃取数据。
内容的提问来源于stack exchange,提问作者Drimer
相关产品推荐
相关产品推荐

