目前,我正在执行以下操作:
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")
它很好用,但是当我离开该函数时,我注意到Globals和Locals都不再具有“ some_function”函数。 (我希望它是垃圾收集)
我的问题是,如何将我从某些python文件读取的代码附加到其他代码中?
我知道这是不好的作法和不安全的方法等。但是我想以“ py2exe”主要部分并使用户可以附加Python代码的方式来实现。他可以通过覆盖功能来破坏整个应用程序,但不能,但是我可以100%信任用户。
谢谢,斯托拉斯
最佳答案
...当我离开功能...
如果将exec
调用包装在函数中,则它将在函数范围内执行。如果您希望它在其他范围内执行,只需将相应的dict作为参数提供给exec *:
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.
*编辑:
实际上在python2中它不是参数,它是元组的第二个元素,仅在python3中它是参数,因为exec已经成为函数而不是语句,但是为了兼容起见,在python2中引入了元组形式。
关于python - 使用exec从local()调用Python函数目录,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18331640/