Marco Islas

Incorporando python en nuestros proyectos en C

Bien, uno podria pensar.. ????????Y para que?, pues... para darle mayor soltura a nuestro programa, implementar un sistema de plugins en Python, o simplemente para evitar que el pid sea python.

Cuando corremos un programa en python a estilo python miscript.py y vemos la tabla de procesos veremos que el pid pertenece al programa "python" y dentro de sus argumentos tenemos el "miscript.py", incluso cuando ejecutemos nuestro script asi: "./myscript.py". Mayor problema, no vamos a estar mirando la tabla de procesos siempre, o si? ;-)

El problema, al menos conmigo es que soy muy huevon para andar buscando el pid y cositas asi, yo prefiero un "killall python", lo malo es que me termina mantando otros procesos de python como mi shell interactiva con la que practico peque??????┬▒as piezas de codigo, o el mendigo (chupa-recursos) deskbar :-P.

La soluci???????n, empotrar Python en un "lanzador" en C. el ejemplo que les pondre es la forma mas raza, escuata y todo lo que se puedan imaginar, pero funciona >:-), es algo que ya hice con Christine

Primero moveremos nustro lanzador original escrito en python a algun paquetin



cp christine lib_christine/christine.py


Luego creamos el lanzador en c:

 
 
#include
int
main(int argc, char *argv[])
{
  Py_Initialize();
  PyRun_SimpleString("from lib_christine.christine import *\n"
                     "a = christine()\n"
                     "a.main()\n");
  Py_Finalize();
  return 0;
}
 
 

compilamos y enlazamos:



$ gcc -Wall -O2 -march=k8 -mtune=k8 -I/usr/include/python2.4/ -c christine.c -o christine.o
$ gcc -Xlinker -export-dynamic christine.o /usr/lib/python2.4/config//libpython2.4.a -lnsl -ldl -lreadline -ltermcap -lieee -lpthread -lutil -lm -o christine


y vual???????, listo :-).
Screenshot-2.png
blog comments powered by Disqus