выполнить строку как код python

Как мне выполнить строку, содержащую код 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:

Источник

Как выполнить строку, содержащую код 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 месяцев, вы усложняете его для себя напрямую.

Источник

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.

выполнить строку как код python. e0v1H. выполнить строку как код python фото. выполнить строку как код python-e0v1H. картинка выполнить строку как код python. картинка e0v1H. Как мне выполнить строку, содержащую код Python в Python?

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.

выполнить строку как код python. KtXnq. выполнить строку как код python фото. выполнить строку как код python-KtXnq. картинка выполнить строку как код python. картинка KtXnq. Как мне выполнить строку, содержащую код Python в Python?

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.

Источник

Запуск Python и python-скрипт на компьютере

Код, написанный на языке Python, может храниться в редакторе кода, IDE или файле. И он не будет работать, если не знать, как его правильно запускать.

В этом материале рассмотрим 7 способов запуска кода, написанного на Python. Они будут работать вне зависимости от операционной системы, среды Python или местоположения кода.

Где запускать Python-скрипты и как?

Python-код можно запустить одним из следующих способов:

Запуск Python-кода интерактивно

Для запуска интерактивной сессии нужно просто открыть терминал или командную строку и ввести python (или python3 в зависимости от версии). После нажатия Enter запустится интерактивный режим.

Вот как запустить интерактивный режим в разных ОС.

Интерактивный режим в Linux

Откройте терминал. Он должен выглядеть приблизительно вот так :

выполнить строку как код python. terminal linux python. выполнить строку как код python фото. выполнить строку как код python-terminal linux python. картинка выполнить строку как код python. картинка terminal linux python. Как мне выполнить строку, содержащую код Python в Python?

После нажатия Enter будет запущен интерактивный режим Python.

Интерактивный режим в macOS

На устройствах с macOS все работает похожим образом. Изображение ниже демонстрирует интерактивный режим в этой ОС.

выполнить строку как код python. terminal macos zapusk python. выполнить строку как код python фото. выполнить строку как код python-terminal macos zapusk python. картинка выполнить строку как код python. картинка terminal macos zapusk python. Как мне выполнить строку, содержащую код Python в Python?

Интерактивный режим в Windows

выполнить строку как код python. terminal windows zapusk python. выполнить строку как код python фото. выполнить строку как код python-terminal windows zapusk python. картинка выполнить строку как код python. картинка terminal windows zapusk python. Как мне выполнить строку, содержащую код Python в Python?

Запуск Python-скриптов в интерактивном режиме

В таком режиме можно писать код и исполнять его, чтобы получить желаемый результат или отчет об ошибке. Возьмем в качестве примера следующий цикл.

выполнить строку как код python. zapusk python skriptov v interaktivnom rezhime. выполнить строку как код python фото. выполнить строку как код python-zapusk python skriptov v interaktivnom rezhime. картинка выполнить строку как код python. картинка zapusk python skriptov v interaktivnom rezhime. Как мне выполнить строку, содержащую код Python в Python?

Для выхода из интерактивного режима нужно написать следующее:

И нажать Enter. Вы вернетесь в терминал, из которого и начинали.

Есть и другие способы остановки работы с интерактивным режимом Python. В Linux нужно нажать Ctrl + D, а в Windows — Ctrl + Z + Enter.

Стоит отметить, что при использовании этого режима Python-скрипты не сохраняются в локальный файл.

Как выполняются Python-скрипты?

Отличный способ представить, что происходит при выполнении Python-скрипта, — использовать диаграмму ниже. Этот блок представляет собой скрипт (или функцию) Python, а каждый внутренний блок — строка кода.

При запуске скрипта интерпретатор Python проходит сверху вниз, выполняя каждую из них. Именно таким образом происходит выполнение кода.

Но и это еще не все.

Блок-схема выполнения кода интерпретатором

Это набор инструкций, которые приводят к финальному результату.

Иногда полезно изучать байткод. Если вы планируете стать опытным Python-программистом, то важно уметь понимать его для написания качественного кода.

Это также пригодится для принятия решений в процессе. Можно обратить внимание на отдельные факторы и понять, почему определенные функции/структуры данных работают быстрее остальных.

Как запускать Python-скрипты?

Для запуска Python-скрипта с помощью командной строки сначала нужно сохранить код в локальный файл.

Возьмем в качестве примера файл, который был сохранен как python_script.py. Сохранить его можно вот так:

Сохранить скрипт в текстовом редакторе достаточно легко. Процесс ничем не отличается от сохранения простого текстового файла.

Но если использовать командную строку, то здесь нужны дополнительные шаги. Во-первых, в самом терминале нужно перейти в директорию, где должен быть сохранен файл. Оказавшись в нужной папке, следует выполнить следующую команду (на linux):

После нажатия Enter откроется интерфейс командной строки, который выглядит приблизительно следующим образом:

выполнить строку как код python. interfejs komandnoj stroki. выполнить строку как код python фото. выполнить строку как код python-interfejs komandnoj stroki. картинка выполнить строку как код python. картинка interfejs komandnoj stroki. Как мне выполнить строку, содержащую код Python в Python?

Теперь можно писать код и с легкостью сохранять его прямо в командной строке.

Как запускать скрипт в командной строке?

Источник

Как выполнить строку, содержащую код Python в Python?

Как выполнить строку, содержащую код Python в Python?

Для операторов используйте exec(string) (Python 2/3) или exec string (Python 2):

Когда вам нужно значение выражения, используйте eval(string) :

Тем не менее, первым шагом должно быть спросить себя, действительно ли вам это нужно. Выполнение кода, как правило, должно быть последним средством: он медленный, безобразный и опасный, если он может содержать введенный пользователем код. Вы всегда должны сначала смотреть на альтернативы, такие как функции высшего порядка, чтобы увидеть, могут ли они лучше удовлетворить ваши потребности.

В этом примере строка выполняется как код с использованием функции exec.

eval и exec являются правильным решением, и они могут быть использованы более безопасным способом.

По сути, вы определяете пространство имен, в котором будет выполняться код.

eval() только для выражений, хотя eval(‘x+1’) работает, eval(‘x=1’) не будет работать, например. В этом случае лучше использовать exec или даже лучше: попробуйте найти лучшее решение 🙂

Избегайте exec и eval

Использование exec и eval в Python весьма неодобрительно.

Есть лучшие альтернативы

С верху ответ (акцент мой):

установить и получить значения переменных с именами в строках

[while eval ] будет работать, как правило, не рекомендуется использовать имена переменных, имеющие значение для самой программы.

Вместо этого лучше использовать диктовку.

Это не идиоматично

Python это не PHP

Не пытайтесь обойти идиомы Python, потому что другой язык делает это по-другому. Пространства имен есть в Python по причине и только потому, что она дает вам инструмент, exec но это не значит, что вы должны использовать этот инструмент.

Это опасно

Так что Eval не является безопасным, даже если вы удалите все глобальные и встроенные!

Итак, можно ли сделать eval безопасным? Тяжело сказать. На данный момент, я думаю, вы не можете причинить вреда, если не можете использовать двойные подчеркивания, поэтому, возможно, если вы исключите любую строку с двойным подчеркиванием, вы в безопасности. Может быть.

Трудно читать и понимать

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *