Функція exec() в Python

 1996

Функція exec() виконує динамічно створену програму, яка є рядком або об’єктом коду. Наприклад:

Результат:

Sum = 15

Синтаксис функції exec()

Параметри функції exec()

Функція exec() приймає три параметри:

   object — рядок або об’єкт коду;

   globals (не обов’язково) — словник;

   locals (не обов’язково) — об’єкт для зіставлення (зазвичай словник).

Значення, яке повертає функція exec()

Функція exec() не повертає жодного значення.

Приклад №1: Функція exec() в Python

Результат:

Sum = 15

В даному прикладі ми передали рядковий об’єкт program у функцію exec(). Функція виконує Python-код всередині об’єкта та виводить Sum = 15.

Приклад №2: Функція exec() з однорядковим програмним вводом

Результат:

Enter a program: [print(item) for item in [1, 2, 3]]
1
2
3

У даному прикладі ми використали наступне в якості вхідного значення:

Функція exec() виконує об’єкт program, який має введений користувачем код.

Примітка: При використанні функції exec() з модулем os потрібно бути обережним. Це пов’язано з тим, що можна випадково змінити або видалити файли під час використання коду os.system('rm -rf *') у вхідних даних.

Приклад №3: Перевірка доступного коду за допомогою функції exec()

Рекомендується перевіряти функції та змінні, які потрібно використовувати з функцією exec(). Це можна зробити за допомогою функції dir():

Результат:

['__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'cbrt', 'ceil', 'comb', 'copysign', 'cos', 'cosh', 'degrees', 'dist', 'e', 'erf', 'erfc', 'exp', 'exp2', 'expm1', 'fabs', 'factorial', 'floor', 'fmod', 'frexp', 'fsum', 'gamma', 'gcd', 'hypot', 'inf', 'isclose', 'isfinite', 'isinf', 'isnan', 'isqrt', 'lcm', 'ldexp', 'lgamma', 'log', 'log10', 'log1p', 'log2', 'modf', 'nan', 'nextafter', 'perm', 'pi', 'pow', 'prod', 'radians', 'remainder', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'tau', 'trunc', 'ulp']

Приклад №4: Блокування непотрібних функцій та змінних у функції exec()

У більшості випадків нам не потрібні всі функції та змінні функції exec(). Ми можемо заблокувати ці непотрібні функції та змінні, передавши необов’язкові параметри globals та locals у функцію exec():

Результат:

NameError: name 'cbrt' is not defined

Тут ми обмежили використання функції cbrt() в exec(), хоча імпортували всю бібліотеку math. Ось чому ми отримали помилку.

Приклад №5: Використання необхідних функцій та змінних у функції exec()

Ми також можемо зробити необхідні функції та змінні доступними для використання з функцією exec(). Для цього нам потрібно передати словник locals у функцію exec():

Результат:

['dir', 'print']

Ми заблокували всі глобальні вбудовані функції за допомогою наступного рядка коду:

Але дозволили виконання двох функцій: print() та dir(), разом із кодом:

Нарешті, ми передали функцію dir() усередину функції print(), а потім передали все у функцію exec() для виведення списку доступних функцій.

Тут globalsParameter та localsParameter є необов’язковими параметрами, які ми використали з функцією exec() для виводу лише тих функцій, до яких хочемо отримати доступ.

Оцінити статтю:

1 Зірка2 Зірки3 Зірки4 Зірки5 Зірок (5 оцінок, середня: 4,60 з 5)
Завантаження...

Залишити відповідь

Ваш E-mail не буде опублікований. Обов'язкові поля відмічені *