这个内置函数有助于执行动态创建的程序。exec()
函数接收要执行的字符串或代码块。它被解析并作为 python 语句执行。
**exec(object, globals, locals)** #Where object can be a string or a code object
安全风险
如果我们使用一个 Unix 系统(macOS、Linux 等)并导入一个操作系统模块,它有助于提供操作系统功能,如文件的读、写。并且用户使用exec(input())
输入一个值,它可以使用命令os.system('rm -rf *')
发出改变文件甚至删除所有文件的命令。
exec()
参数:取 3 个参数,其中第一个参数是一个对象,如果该对象是一个字符串,它将作为 python 语句执行,如果它是一个打开的文件,那么它将一直执行到 EOF,如果它是一个代码对象,那么它将被简单地执行。
参数 | 描述 | 必需/可选 |
---|---|---|
目标 | 字符串或代码对象 | 需要 |
全球 | 包含全局变量的字典。 | 可选择的 |
当地人 | 包含局部变量的字典。 | 可选择的 |
exec()
返回值它不返回值。它只是执行给定的字符串或代码对象。
exec()
方法的示例 x = 1
exec('print(x==1)')
exec('print(x+2)')
输出:
True
3
exec()
动态代码执行示例 from math import *
for l in range(1, 3):
func = input("Enter Code Snippet to execute:
")
try:
exec(func)
except Exception as ex:
print(ex)
break
print('Done')
输出:
Enter Code Snippet to execute:
print(sqrt(16))
4.0
Enter Code Snippet to execute:
print(min(2,1))
1
Done
from math import *
exec('print(dir())', {})
# This code will raise an exception
# exec('print(sqrt(9))', {})
输出:
['__builtins__']
from math import *
globalsParameter = {'__builtins__' : None}
localsParameter = {'print': print, 'dir': dir}
exec('print(dir())', globalsParameter, localsParameter)
输出:
['dir', 'print']