是否有可以使用本地和全局参数突破 execfile 的纯 python 代码?
我的印象是python中没有什么是“私有的”。但是,如果我执行一段 python 代码(使用 execfile)并在本地和全局命名空间参数中捕获执行结果,我不知道您将如何获取主可执行文件的范围。
谢谢,陈兹
是否有可以使用本地和全局参数突破 execfile 的纯 python 代码?
我的印象是python中没有什么是“私有的”。但是,如果我执行一段 python 代码(使用 execfile)并在本地和全局命名空间参数中捕获执行结果,我不知道您将如何获取主可执行文件的范围。
谢谢,陈兹
如果通过“突破”,您的意思是访问调用代码中的 Python 对象,那么我不确定。
但如果你说的突破,你的意思是
import subprocess
subprocess.call(['rm', '-rf', '/'])
那么肯定可以。
看看pysandbox。它的作者已经为沙盒eval
和朋友做了很多工作。如果你真的想这样做,我会先去那里。
这是一个例子。文件beast.py
:
import inspect
for i, t in enumerate(inspect.stack()):
if i == 1:
print 'i in the caller is', t[0].f_globals['i']
t[0].f_globals['i'] = 666
t[0].f_globals['j'] = -13
和文件xxx.py
:
i = 1
execfile("beast.py", {}, {})
print i
print j
然后:
$ python xxx.py
i in the caller is 1
666
-13
阻止 import 没有任何好处inspect
。同样的事情可以通过直接处理回溯对象来完成。如果您想知道如何,请学习inspect.py
;-)