Файлы с программным кодом

fajly s programmnym kodom Интеграция Python/C

Программы на C могут выполнять целые программные файлы Python, импортируя модули и выполняя файлы сценариев через API или обобщенные системные вызовы (например, popen).

Физически в программу C обычно встраивается двоичная библиотека Python. Программный код Python, выполняемый из C, может поступать из разнообразных источников:

     Строки программного кода могут загружаться из файлов, могут быть получены в результате ввода пользователем, из баз данных и файлов- хранилищ, выделены из файлов HTML или XML, могут читаться через сокеты, строиться или находиться непосредственно в программах C, передаваться функциям расширения C из программного кода регистрации Python и так далее.

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

     Файлы с программным кодом просто существуют в виде файлов, модулей и выполняемых сценариев.

Регистрация является приемом, часто используемым при организации обратных вызовов, который будет более подробно изучен далее в этой главе. Но что касается строк программного кода, возможных источников существует столько, сколько их есть для строк символов C. Например, программы на C могут динамически строить произвольный программный код на языке Python, создавая и выполняя строки.

Наконец, после получения некоторого программного кода Python, который должен быть выполнен, необходим какой-то способ связи с ним: программный код Python может потребовать передачи входных данных из слоя C и может создать вывод для передачи результатов обратно в C. На самом деле встраивание в целом представляет интерес, когда у встроенного программного кода имеется доступ к содержащему его слою C. Обычно средство связи определяется видом встроенного программного кода:

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

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

     Файлы программного кода по большей части могут использовать для связи такую же технику, как строки кода. При выполнении в качестве отдельных программ файлы могут также использовать приемы взаимодействий между процессами (IPC).

Естественно, все виды встроенного программного кода могут обмениваться данными с C, используя общие средства системного уровня: файлы, сокеты, каналы и другие. Однако обычно эти способы действуют медленнее и менее непосредственно. В данном случае нас по-прежнему интересует интеграция, основанная на вызовах функций.

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

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

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