Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/331.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 如何更改内置模块变量?_Python_Python Exec - Fatal编程技术网

Python 如何更改内置模块变量?

Python 如何更改内置模块变量?,python,python-exec,Python,Python Exec,如果运行此代码: src = "import os" d = dict(__builtins__={}) exec src in d Python说: ImportError: __import__ not found 这是我喜欢做的,但当创建(或加载)新模块时: import imp mod = imp.new_module("foo") src = "import os" exec src in mod.__dict__ 正如你所看到的,它运行,但我喜欢它没有在上面的程序。我喜欢禁用所

如果运行此代码:

src = "import os"
d = dict(__builtins__={})
exec src in d
Python说:

ImportError: __import__ not found
这是我喜欢做的,但当创建(或加载)新模块时:

import imp
mod = imp.new_module("foo")
src = "import os"
exec src in mod.__dict__
正如你所看到的,它运行,但我喜欢它没有在上面的程序。我喜欢禁用所有内置变量和函数。有没有办法做到这一点

如果打印
mod.\uuuuu dict\uuuu
,您可以看到它有
\uuuuuuu内置\uuuuu
变量,例如任何Python模块。我想我必须把它的值改成{},但我不知道怎么做。

我想我必须把它的值改成{},但我不知道怎么做


所以你想“禁用所有的内置变量和函数”,但不是所有的?你所做的看起来有点像黑客;是什么导致您需要这样做的?听起来您希望在“安全”环境中以某种方式运行任意字符串。假设您可以使用操作系统模块打开文件,而无需访问打开的内置项,那么您应该更清楚地了解您想要的内容。我希望创建一个具有受限内置项全局常量和函数的模块(但仅限于此模块),类似于第一个代码(如果您通过“sum([2,4])更改src)这也是一个错误,因为python不知道如何执行它)?如果@CrazyCasta是正确的,而您正试图进行沙箱,请参见,例如,他似乎试图在受限环境中执行某些操作。很明显,python exec标记是匹配的,如果restrict没有描述,我就看不出问题所在。如果您使用这个和RestrictedPython,您可以控制代码中大多数(我不确定是否所有)不安全的行。
mod.__dict__["__builtins__"] = {}