Un lanzador en python
Chema Cortés
chemacortes en wanadoo.es
Jue Mar 28 18:34:49 CET 2002
Hola, ajpv en alu.ua.es:
En respuesta a tu mensaje del Mié 27 Mar 2002 18:48:
> He intentado embeber una aplicacion de python en este programa en
> C++, pero falla al ejecutar.
>
> FILE * f;
> f = fopen("prog.py", "r");
> Py_Initialize();
> PyRun_SimpleFile(f, "log.txt");
> Py_Finalize();
>
> en un principio solo hago esto. Lo que pasa es que no es capaz de
> ejecutar la llamada a PyRun_SimpleFile();. ¿Sera por usar Tkinter?
No tengo mucha experiencia con el tema, pero he probado el código y lo he
hecho funcionar con Tkinter.
Puede que tengas problemas con el linker. En el manual de python explica que
hay un problema con las librerías dinámicas cuando empotras el python y como
se resuelve (con la opción -export-dynamic del linker).
También debes añadir estas dos líneas más a tu código:
int main(int argc, char **argv) {
//...
Py_SetProgramName(argv[0]);
Py_Initialize();
PySys_SetArgv(argc, argv);
//...
}
El Tkinter utiliza sys.argv[0], con lo que debe de estar inicializado
convenientemente.
Si sigues teniendo problemas, sería mejor que nos pusieras la salida de
errores del compilador para hacernos una idea. Entre los fuentes del python,
tienes en el directorio Demos/embed un ejemplo de un programa con el
intérprete python empotrado.
> Solo puedo usar python embebido si es para funciones con tipos de
> datos propios de python.
No debería ser así. Tan sólo tienes que realizar una conversión del tipo
("casting"). Puede que no entienda bien la pega que pones. Tienes funciones
que te facilitan la conversión de tipos de datos entre ambos lenguajes (eg:
PyArg_ParseTuple ó Py_BuildValue). Para realizar cálculos te debería sobrar;
pero aunque así no fuera, aún te quedaría la posibilidad de crearte nuevos
tipos de datos en python.
Con lo que sí deberás tener cuidado es con las cadenas de caracteres. En
Tkinter se codifican en unicode (sizeof(u'ñ')!=1), por lo que no deberías
utilizar las strings de C y emplear siempre las de python.
Por cierto, el tema de empotrado del python está algo mejor explicado en la
la documentación del python 2.2. Si no lo tienes instalado, puedes consultar
dicha documentación en
http://www.python.org/doc/current/ext/embedding.html
http://www.python.org/doc/current/api/api.html
Saludos,
--
Chema Cortes (chemacortes en wanadoo.es) | LinuxUser#142755 - SuSE Linux 7.3
ZARALINUX http://www.zaralinux.org | "La ignorancia se apodera de quien
PYTANDO http://pytando.sf.net | se contenta con lo que sabe"
Más información sobre la lista de distribución Python-es