使用 eval 和 exec 访问模块外的东西
Access things outside of module with eval and exec
如果我导入一个使用 exec
或 eval
的模块,是否可以让它访问主程序?
myExec.py
def myExec(code):
exec(code)
main.py
import myExec
def test():
print("ok")
myExec.myExec("test()")
是的!
exec 有几个可选参数,全局变量和局部变量。这些基本上以字典的形式告诉它允许使用哪些全局变量和局部变量。调用 globals()
或 locals()
函数 returns 包含您调用的所有全局和局部变量的字典,因此您可以使用:
myExec.py:
def myExec(code, globals_=None, locals_=None): # the trailing underscore is so that there are no name conflicts
exec(code, globals_, locals_)
main.py:
import myExec
def test():
print("ok")
myExec.myExec("test()", globals())
如果我导入一个使用 exec
或 eval
的模块,是否可以让它访问主程序?
myExec.py
def myExec(code):
exec(code)
main.py
import myExec
def test():
print("ok")
myExec.myExec("test()")
是的!
exec 有几个可选参数,全局变量和局部变量。这些基本上以字典的形式告诉它允许使用哪些全局变量和局部变量。调用 globals()
或 locals()
函数 returns 包含您调用的所有全局和局部变量的字典,因此您可以使用:
myExec.py:
def myExec(code, globals_=None, locals_=None): # the trailing underscore is so that there are no name conflicts
exec(code, globals_, locals_)
main.py:
import myExec
def test():
print("ok")
myExec.myExec("test()", globals())