sábado, 20 de fevereiro de 2010

Embutindo Python em Aplicação C - Exemplo Simples

Nesse artigo mostraremos como embutir uma aplicação python no código C. Para isso, usamos o IDE Eclipse 3.4 (GANYMEDE) com o CDT (Plugin do eclipse para trabalhar com a linguagem C/C++) instalado. Também, estamos usando o python versão 2.6.4. O python possui uma ferramenta chamada "python-config" que permite simplificar a compilação e linkagem de código C/C++ junto com os cabeçalhos e bibliotecas C do python.
Para usar o eclipse, crie um projeto em linguagem C, depois, selecione o projeto criado na visão "Project Explorer" e clique com o botão direito e assim aparecerá um menu de opções. Nesse menu selecione "Properties" ou pode-se usar o atalho "ALT+ENTER" apartir do projeto C selecionado.
Veja na figura abaixo a configuração do cabeçalho para compilar o projeto C com os cabeçalhos da API C do python.



Veja na figura abaixo a configuração das bibliotecas para linkar o projeto C com as bibliotecas da API C do python.



Depois disso, crie um arquivo ".c" (no projeto C criado) que está mostrado abaixo:
----------------------------------------------------------------------------------------

/*
============================================================================
Name : PythonEmbeded.c
Author : user
Version :
Copyright : Your copyright notice
Description : Hello World in C, Ansi-style
============================================================================
*/

#include <stdio.h>
#include <stddef.h>
#include <stdlib.h>
#include <python.h>


int main(int argc, char *argv[]) {

Py_Initialize();

PyObject* modname_main = PyString_FromString("__main__");

PyObject* main_module = PyImport_Import(modname_main);

PyObject* globals = PyModule_GetDict(main_module);

PyObject* locals = PyDict_Copy(globals);

PyRun_String("import __main__\nprint dir(__main__)\nprint 'Hello python!!'\n", Py_file_input, globals, locals);

Py_Finalize();

return 0;
}

----------------------------------------------------------------------------------------


Depois disso, compile e ligue ("linkagem") do programa C e execute normalmente.

Para iniciar o interpretador do python, é feita a chamada a função Py_Initialize() e para finalizar a execução do interpretador é chamado a função Py_Finalize(). Entre essas chamadas (de inicializar e finalizar interpretador python) podemos executar o código python através do uso da função PyRun_String, cujo argumento do tipo char * é uma string (estilo C) representando o código python a ser executado.