Выполнение простых строк программного кода Python

vypolnenie prostyh strok programmnogo koda python Интеграция Python/C

Проще всего, пожалуй, запустить программный код Python из C можно с помощью функции API PyRun_SimpleString. Обращаясь к ней, программы C могут выполнять программы Python, представленные в виде массивов символьных строк C. Эта функция весьма ограничена: весь программный код выполняется в одном и том же пространстве имен (модуль __main__), строки программного кода должны быть инструкциями Python (не выражениями), отсутствует простой способ обмена входными и выходными данными с выполняемым программным кодом Python.

Тем не менее, это простой способ для начала. Кроме того, с добавлением импортируемого модуля расширения C, который может задействоваться встраиваемым программным кодом Python для обеспечения связи с объемлющим слоем C, такой прием может с успехом обеспечивать множественные цели встраивания. Для демонстрации основ в примере 20.23 приводится программа C, которая выполняет программный код Python и получает те же результаты, что были получены в интерактивном сеансе, приведенном в предыдущем разделе.

Пример 20.23. PP4E\Integrate\Embed\Basics\embed-simple.c

/*********************************************************************

#  простые строки программного кода: C действует как интерактивная

#  оболочка, код выполняется в модуле __main__, вывод не посылается в C;

*********************************************************************/

#include <Python.h> /* определение стандартного API */

main() {

printf("embed-simple\n");

Py_Initialize();

PyRun_SimpleString("import usermod"); /* загрузить файл .py */

PyRun_SimpleString("print(usermod.message)"); /* в пути поиска Python */ PyRun_SimpleString("x = usermod.message"); /* компилировать и выполнить */ PyRun_SimpleString("print(usermod.transform(x))");

Py_Finalize();

}

Во-первых, нужно отметить, что при встраивании Python программы C всегда вызывают функцию Py_Initialize, чтобы инициализировать подключаемые библиотеки Python, прежде чем использовать какие-либо другие функции API, и обычно вызывают функцию Py_Finalize для завершения интерпретатора.

Остальная часть программного кода проста — C передает интерпретатору Python готовые строки, примерно совпадающие с теми, что вводились в интерактивной оболочке. В действительности, можно было бы объединить все строки с программным кодом Python в одну строку через символ \n и передать интерпретатору в виде одной большой строки. Внутренне PyRun_SimpleString вызывает компилятор и интерпретатор Python для выполнения переданных из C строк. Как обычно, компилятор Python всегда есть в системах, где установлен Python.

Использованная литература:

Марк Лутц — Программирование на Python, 4-е издание, II том, 2011

Каталог сайтов Всего.ру
Оцените статью
Секреты программирования
Добавить комментарий