2012-06-20 24 views
5

Quiero ejecutar un código helloword.cpp que toma algún argumento de la consola analiza esos argumentos y luego imprime "hello world" en la consola.ejecutando código C++ de python

Ahora, quiero analizar estos argumentos de unos scripts python parsearguments.py

Así, por ejemplo:

def parse_arguments: 
    ...# some code 
    return arguments 

Ahora, ¿cómo se comunican entre Python y C++. He estado leyendo y veo que cython, boost python son las opciones, pero me es difícil encontrar el ejemplo correcto de hello world.

Cualquier sugerencia será apreciada. Gracias

+5

Uno no ejecuta el código fuente de C++. –

+0

Su solución no me suena bien, pero tal vez me falta algo de contexto. ¿Por qué decidiste analizar argumentos con Python en primer lugar? –

+0

@Grigory: Estoy usando uno de los frameworks escritos en C++ mientras uso Python ... A partir de ahora, primero recopilo los datos e infero algo de python.y luego esa inferencia es necesaria para pasar a ese marco de C++. A partir de ahora, guardo todo en un archivo de texto en el paso intermedio y luego lo leo a C++, pero quiero integrarlos juntos ... ¿cuál es la mejor manera de hacerlo? Gracias – Fraz

Respuesta

5

¿Qué tal si pasa el texto que genera con Python a la entrada estándar de su programa C++? Básicamente, debe usar el módulo subprocess de Python para iniciar el programa C++ y volcar el texto en su salida estándar.

En caso de que se requiera que su programa C++ se ejecute por separado en segundo plano, puede probar con otra forma de comunicación entre procesos, como los sockets de dominio de Unix.

Usar boost :: python también es una opción, pero podría ser un poco más difícil de manejar.

6

Para ejecutar código C++ en Python, se puede utilizar con eficacia impulso pitón, aquí es un tutorial: http://www.boost.org/doc/libs/1_59_0/libs/python/doc/index.html Usted escribe una especie de envoltura exterior se código C++.

Si es un código C, python tiene una biblioteca interna llamada ctypes.

En ambos casos, debe compilar el código C/C++ en la biblioteca compartida.

1

El uso de boost.python me parece una buena solución. Pero dependiendo de tu experiencia en C++ esto puede ser bastante complicado. Un buen punto de partida es aquí:

http://wiki.python.org/moin/boost.python

Boost.Python le permite exportar clases de C++ y las funciones miembro de Python para poder utilizarlos desde allí.

2

Un par de otras opciones además de Boost.python son SIP y SWIG (Wrapper simplificado y generador de interfaz). Al igual que Boost, SIP y SWIG son de código abierto.

SWIG es particularmente potente, pero también un poco peluda. Proporciona soporte para la interfaz de C y C++ con una carga de otros lenguajes que incluyen (no una lista completa) Python, Perl, Lua, Tcl/Tk, Ocaml, Ruby, Java. Un aspecto de SWIG es que analiza tus encabezados de C++. Esto tiene beneficios y trampas. Una ventaja es que hace la mayor parte del trabajo de generar las interfaces. Un inconveniente es que no maneja algunas de las esquinas oscuras de C++ 2003, y no se ha incrementado a C++ 11 en absoluto. Otro inconveniente es que la compilación de un gran proyecto se vuelve lenta. Muy, muy lento

Cuestiones relacionadas