您的位置:

27. Python exec()

Python exec()

更新:

这个内置函数有助于执行动态创建的程序。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()返回值

它不返回值。它只是执行给定的字符串或代码对象。

Python 中exec()方法的示例

示例 1:简单的执行示例

 x = 1

exec('print(x==1)')

exec('print(x+2)') 

输出:

True
3 

示例 2:Python exec()动态代码执行示例

 from math import *

for l in range(1, 3):

    func = input("Enter Code Snippet to execute:\n")
    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 

示例 3:将空字典作为全局参数传递

 from math import *
exec('print(dir())', {})

# This code will raise an exception
# exec('print(sqrt(9))', {}) 

输出:

['__builtins__'] 

示例 4:传递全局和局部字典

 from math import *

globalsParameter = {'__builtins__' : None}
localsParameter = {'print': print, 'dir': dir}
exec('print(dir())', globalsParameter, localsParameter) 

输出:

['dir', 'print']