Python使用exec从local()调用函数目录
目前我做的事情如下:Python使用exec从local()调用函数目录,python,eval,Python,Eval,目前我做的事情如下: pyfd = open("some_python_script.py", "r") src = pyfd.read() pyfd.close() exec(src) #Note, also tried eval and execfile, I use read as I do something with it. locals()["some_function"]("foo", "bar") 它工作得很好,但是当我离开函数时,我注意到全局函数和局部函数都不再具有“som
pyfd = open("some_python_script.py", "r")
src = pyfd.read()
pyfd.close()
exec(src) #Note, also tried eval and execfile, I use read as I do something with it.
locals()["some_function"]("foo", "bar")
它工作得很好,但是当我离开函数时,我注意到全局函数和局部函数都不再具有“some_函数”函数。(我想是垃圾收集)
我的问题是,如何将从某个python文件读取的代码附加到其他代码中
我知道这是一种不好的做法,不安全等等,但我想让它成为我的主要部分,我的用户可以附加Python代码。他可以通过覆盖功能破坏整个应用程序,但我可以100%信任用户
谢谢,斯托拉斯
。。。当我离开函数时
如果将exec
调用包装到函数中,那么它将在函数范围内执行。如果希望在不同的范围内执行,只需将相应的dict作为参数提供给*:
*编辑:
实际上,在python2中,它不是一个参数,而是元组的第二个元素,只有在python3中,它是一个参数,因为它已成为一个函数而不是一个语句,但为了兼容性,python2中引入了元组形式。谢谢,我以前在文档中注意到了这一点,所以我阅读了它。我试过了,但没用。但现在看来答案是正确的(所以我肯定也做错了别的事)谢谢:)
def load_some_script():
pyfd = open("some_python_script.py", "r")
src = pyfd.read()
pyfd.close()
exec(src, globals()) # execute the code in the global scope
load_some_script()
some_function('foo', 'bare') # should now be available at module level.