выполнить строку как код python
Как выполнить строку, содержащую код Python в Python?
Как выполнить строку, содержащую код Python в Python?
12 ответов
для утверждения, используйте exec(string) (в Python 2/3) или exec string (Python 2):
когда вам нужно значение выражения, использовать eval(string) :
однако первым шагом должно быть спросить себя, действительно ли вам это нужно. Выполнение кода обычно должно быть последним средством: он медленный, уродливый и опасный, если он может содержать введенный пользователем код. Вы всегда должны смотреть на альтернативы в первую очередь, такие как функции более высокого порядка, чтобы увидеть, могут ли они лучше удовлетворить ваши потребности.
в примере строка выполняется как код с помощью функции exec.
eval и exec являются правильным решением, и их можно использовать в безопасное порядке.
как говорится в справочное руководство Python и ясно объяснено в этой руководства eval и exec функции принимают два дополнительных параметра, которые позволяют пользователю указать, какие глобальные и локальные функции и переменные доступны.
по существу вы определяете пространство имен, в котором будет выполняться код.
вы выполняете код с помощью exec, как и в следующем сеансе ожидания:
избежать exec и eval
используя exec и eval в Python очень неодобрительно.
есть лучшие альтернативы
из верхнего ответа (акцент мой):
однако первым шагом должно быть спросить себя, действительно ли вам это нужно. выполнение кода должно как правило, позиция последней инстанции: это медленно, уродливо и опасно, если он может содержать введенный пользователем код. Вы всегда должны смотреть на альтернативы во-первых, такие как функции высшего порядка, чтобы увидеть, если они могут лучше удовлетворить ваши потребности.
установить и получить значения переменных с именами в строках
[while eval ] будет работать, как правило, нет рекомендуется использовать имена переменных, имеющие значение для самой программы.
вместо этого лучше использовать dict.
это не идиоматические
Python не PHP
не пытайтесь обойти идиомы Python, потому что некоторые другие языки делают это по-другому. Пространства имен в Python и просто потому что это дает вам инструмент exec Это не означает, что вы должны использовать этот инструмент.
опасно
таким образом, eval не является безопасным, даже если вы удалите все глобалы и встроенные!
проблема со всеми этими попытки защитить eval () заключается в том, что они являются черными списками. Они явно удалите вещи, которые могут быть опасными. Это проигранная битва, потому что если в списке остался только один элемент, вы можете атаковать систему.
Итак, можно ли сделать eval безопасным? Трудно сказать. На данный момент я думаю, что вы не можете причинить никакого вреда, если не можете использовать двойные подчеркивания, поэтому, возможно, если вы исключите любую строку с двойными подчеркиваниями, вы в безопасности. Возможно.
трудно читать и пойми!—14—>
во-первых, exec затрудняет людям чтение вашего кода. Чтобы понять, что происходит, мне не просто нужно прочитать ваш код,я должен прочитать ваш код, выяснить, какую строку он собирается генерировать, а затем прочитать этот виртуальный код. Итак, если вы работаете в команде, или публикация программного обеспечения с открытым исходным кодом или обращение за помощью к кому-то вроде StackOverflow затрудняют помощь других людей. И если есть шанс, что вы собираетесь отлаживать или расширять этот код через 6 месяцев, вы усложняете его для себя напрямую.
Как мне выполнить строку, содержащую код Python в Python?
Как мне выполнить строку, содержащую код Python в Python?
13 ответов
В этом примере строка выполняется как код с использованием функции exec.
Но, если ваш код содержит переменные, вы можете использовать «глобальный» для доступа к нему, а также, чтобы компилятор не вызвал следующую ошибку:
NameError: имя ‘p_variable’ не определено
Если вам нужно значение выражения, используйте eval(string) :
Тем не менее, первым шагом должно быть спросить себя, действительно ли вам это нужно. Выполнение кода, как правило, должно быть последним средством: он медленный, безобразный и опасный, если он может содержать введенный пользователем код. Вы всегда должны сначала искать альтернативы, такие как функции высшего порядка, чтобы увидеть, могут ли они лучше удовлетворить ваши потребности.
eval и exec являются правильным решением, и их можно использовать более безопасным способом.
Как описано в Справочное руководство по Python и ясно объяснено в этом руководстве, eval и <
По сути, вы определяете пространство имен, в котором будет выполняться код.
Я закончил тем, что создал файлы в файловой системе в папке customer_filters и использовал модуль imp, если для этого клиента не применен фильтр, он просто продолжил
Поэтому customerName = «jj» будет выполнять apply_address_filter из файла customer_filters \ jj_filter.py
eval() только для выражений, в то время как eval(‘x+1’) работает, eval(‘x=1’) не будет работать, например. В этом случае лучше использовать exec или даже лучше: попробуйте найти лучшее решение 🙂
Избегайте exec и eval
Использование exec и eval в Python вызывает неодобрение.
Есть лучшие альтернативы
Сверху ответ (выделение мое):
установить и получить значения переменных с именами в строках
[Хотя eval ] будет работать, обычно не рекомендуется использовать имена переменных, имеющие значение для самой программы.
Вместо этого лучше использовать диктовку.
Это не идиоматично
Python это не PHP
Это опасно
Так что Eval не является безопасным, даже если вы удалите все глобальные и встроенные!
Итак, можно ли сделать eval безопасным? Тяжело сказать. На данный момент, я думаю, что вы не можете причинить вреда, если не можете использовать двойные подчеркивания, поэтому, возможно, если вы исключите любую строку с двойным подчеркиванием, вы в безопасности. Может быть.
Трудно читать и понимать
Вы выполняете код, используя exec, как в следующем сеансе IDLE:
How do I execute a string containing Python code in Python?
How do I execute a string containing Python code in Python?
14 Answers 14
For statements, use exec(string) (Python 2/3) or exec string (Python 2):
When you need the value of an expression, use eval(string) :
However, the first step should be to ask yourself if you really need to. Executing code should generally be the position of last resort: It’s slow, ugly and dangerous if it can contain user-entered code. You should always look at alternatives first, such as higher order functions, to see if these can better meet your needs.
In the example a string is executed as code using the exec function.
eval and exec are the correct solution, and they can be used in a safer manner.
As discussed in Python’s reference manual and clearly explained in this tutorial, the eval and exec functions take two extra parameters that allow a user to specify what global and local functions and variables are available.
In essence you are defining the namespace in which the code will be executed.
Avoid exec and eval
Using exec and eval in Python is highly frowned upon.
There are better alternatives
From the top answer (emphasis mine):
However, the first step should be to ask yourself if you really need to. Executing code should generally be the position of last resort: It’s slow, ugly and dangerous if it can contain user-entered code. You should always look at alternatives first, such as higher order functions, to see if these can better meet your needs.
set and get values of variables with the names in strings
[while eval ] would work, it is generally not advised to use variable names bearing a meaning to the program itself.
Instead, better use a dict.
It is not idiomatic
Python is not PHP
Don’t try to circumvent Python idioms because some other language does it differently. Namespaces are in Python for a reason and just because it gives you the tool exec it does not mean you should use that tool.
It is dangerous
So eval is not safe, even if you remove all the globals and the builtins!
The problem with all of these attempts to protect eval() is that they are blacklists. They explicitly remove things that could be dangerous. That is a losing battle because if there’s just one item left off the list, you can attack the system.
So, can eval be made safe? Hard to say. At this point, my best guess is that you can’t do any harm if you can’t use any double underscores, so maybe if you exclude any string with double underscores you are safe. Maybe.
It is hard to read and understand
First, exec makes it harder to human beings to read your code. In order to figure out what’s happening, I don’t just have to read your code, I have to read your code, figure out what string it’s going to generate, then read that virtual code. So, if you’re working on a team, or publishing open source software, or asking for help somewhere like StackOverflow, you’re making it harder for other people to help you. And if there’s any chance that you’re going to be debugging or expanding on this code 6 months from now, you’re making it harder for yourself directly.
Как строку преобразовать в команды?
Нам дана строка:
«print(‘Hello’)
print(‘world’)»
как это(то есть строку) преобразовать в команды(инструкции), то есть как сделать чтобы это выполнилось?
и возможно ли это вообще?
Помощь в написании контрольных, курсовых и дипломных работ здесь.
Преобразовать строку в дату
Есть строка s=’2019-03-08 05:19:29.826600+03′ нужно преобразовать в дату, не могу выбрать.
случай запутанный, что даже в голове извилины путаются, когда хочу объяснить, ну щяс примерно и кратко напишу суть проблемы
Добавлено через 48 минут
ну так: мне надо передать значение в виде строки(ну то есть несколько команд), которое в списке, в класс и чтобы там эти команды выполнились, короче надо чтобы это
В нынешнем описании проблемы все решается более чем просто. Подготавливаешь объекты кода, которые надо выполнить и отправляешь в нужный класс, а там уже его вызываешь и все!
я хотел так сделать
и решил узнать нет ли другого способа, менее объёмного, и ещё это много названий функций надо придумать и потом в них искать тебе нужную
есть ли другой способ, если нет то буду использовать первоначальный, то есть этот
Хранить их в словаре и по ключу дергать нужные.
У тебя какая фобия, что ты боишься создавать функции или в чем проблема? Звучит просто ужасно нелепо.
Тебе нужно сделать много действий, нужно много функции и что? Ни какой громоздкости тут НЕТ!
Вообще-то, я специально в своем примере показал тебе, что так делать не надо. Ты код вообще не смотрел чтоль? Посмотри, как последнюю команду в executor я передавал.
хорошо чтобы вас не путать, другая ситуация.
Дан файл 1.txt:
print(a)
print(b)
Добавлено через 2 минуты
Кем дан? Для чего дан? С какого перепугу это не модуль? Ты вообще понимаешь, что такое модули и зачем они?
да их будет много,и зачем они потом мне нужны в памяти
Добавлено через 5 минут
просто мне скажите можно ли это(строку) выполнить
Открою секрет в больших программах всегда много функций и программы состоят из десятков модулей и многих тысяч строк кода и так же тысяч функций и классов.
Это ни сколько не проблема, python и другие языки не ограничивают тебя на количество функций и т д и на производительности это ни как не скажется.
То, что ты вынесешь функции в файл ничего не изменит, это только сделает твою программу достойной показа в цирке и все, а интерпретатор все равно будет перед выполнением интерпретировать этот код, сохранять созданные объекты в памяти и т д
Как запустить программу на Python
Введение в тему
В этом уроке мы ответим на вопрос: как запустить программу на Python? Чтобы ощутить всю мощь языка Пайтон необходимо уметь запускать код, написанный на нём. Программы на Python 3 запускаются независимо от операционной системы, версии языка и местоположения кода. Программа может храниться в файле, среде разработки или редакторе кода.
Где запускать Python скрипты и как
Запустить программу на Python можно несколькими способами:
1. С помощью консоли (командной строки);
2. Использовать конкретную версию Пайтон или Анаконда;
3. Использовать Crontab;
4. Запустить одну программу Пайтон с помощью другого;
5. Использовать файловый менеджер;
6. Используя интерактивный режим Пайтон;
7. Применить редактор кода или IDE.
Запуск Python кода интерактивно
Если открыть консоль и набрать «python3» + «Enter», то запустится Python shell – интерактивный режим исполнения кода Python. Это означает, что в этом режиме Вы можете построчно вводить код и он, так же построчно, будет выполняться. Чаще всего этот режим используют для отладки каких-то небольших частей программы, а также для запуска скриптов, к примеру, управляющих сервером.
Интерактивный режим в Linux
Для запуска кода в интерактивном режиме в Linux достаточно открыть терминал, ввести
$ python и нажать Enter. Готово!
Интерактивный режим в macOS
В macOS всё устроено так же: вводим /$ python и Enter. Интерактивный режим запущен.
Интерактивный режим в Windows
В операционной системе Windows необходимо войти в командную строку и ввести python. После нажатия Enter консоль будет выглядеть следующим образом:
Запуск python скриптов в интерактивном режиме
В интерактивном режиме можно писать код для проверки гипотез, отладки и прочего. Программа будет выполняться построчно.
Символ «>>>» является «приглашением», то есть язык при помощи этого символа приглашает Вас что-то ввести.
Строчки без этого символа в начале – это «вывод». Вывод – это то, что выводит сам язык, его ответ на код, введённый программистом.
Для выхода из интерактивного режима нужно ввести:
Как выполняются python скрипты
Чтобы понять как происходит выполнение Python-скрипта можно рассмотреть следующий пример:
Блок схема выполнения кода интерпретатором
2. Генерируется бинарный файл. Он читается интерпретатором для выполнения инструкций.
Опытные разработчики Python иногда читают байт-коды для лучшего понимания работы программы.