You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

导入使用exec/eval的模块时,是否可让其访问主程序的资源?

问题结论

该需求可以实现。

原代码报错原因

exec 执行代码时默认使用两个命名空间:当前函数的局部命名空间、exec 所在模块的全局命名空间。你示例中的 exec 位于 myExec 模块内,它的全局命名空间是 myExec 模块的作用域,自然找不到主程序中定义的 test 函数。

解决方法

给 exec 显式传入主程序的命名空间即可,修改代码如下:

修改后的myExec.py

def myExec(code, globals_dict=None, locals_dict=None):
    # 支持传入自定义全局、局部命名空间
    exec(code, globals_dict, locals_dict)

修改后的main.py

import myExec

def test():
    print("ok")

# 调用时传入主程序的全局命名空间
myExec.myExec("test()", globals())

运行上述代码会正常输出 ok。

补充说明

  • 如果需要同时访问主程序当前上下文的局部变量,可以同时传入 locals(),写法为 myExec.myExec("test()", globals(), locals())
  • exec/eval 存在安全风险,如果执行的是不可信的外部输入代码,会触发任意代码执行漏洞,生产环境使用需做严格的安全校验。

内容的提问来源于stack exchange,提问作者pythonian 23

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.20 07:36:05