Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python使用exec从local()调用函数目录_Python_Eval - Fatal编程技术网

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.