1

是否有可以使用本地和全局参数突破 execfile 的纯 python 代码?

我的印象是python中没有什么是“私有的”。但是,如果我执行一段 python 代码(使用 execfile)并在本地和全局命名空间参数中捕获执行结果,我不知道您将如何获取主可执行文件的范围。

谢谢,陈兹

4

2 回答 2

2

如果通过“突破”,您的意思是访问调用代码中的 Python 对象,那么我不确定。

但如果你说的突破,你的意思是

import subprocess
subprocess.call(['rm', '-rf', '/'])

那么肯定可以。

看看pysandbox。它的作者已经为沙盒eval和朋友做了很多工作。如果你真的想这样做,我会先去那里。

于 2013-10-29T01:54:32.020 回答
2

这是一个例子。文件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;-)

于 2013-10-29T02:46:51.147 回答