這個內置函數有助於執行動態創建的程序。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']
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/243266.html