2012-06-20 8 views
5

Voglio eseguire un codice helloword.cpp che accetta un argomento dalla console analizza quegli argomenti e quindi stampa "ciao mondo" nella console.in esecuzione codice C++ da python

Ora, voglio analizzare questi argomenti da uno script python parsearguments.py

Così, per esempio:

def parse_arguments: 
    ...# some code 
    return arguments 

Ora, come faccio a comunicare tra Python e C++. Ho letto e visto che cython, boost python sono le opzioni ma ho difficoltà a trovare il giusto esempio di ciao mondo.

Qualsiasi suggerimento sarà apprezzato. Grazie

+5

Uno non esegue codice sorgente C++. –

+0

La tua soluzione non mi sembra buona, ma forse mi manca qualche contesto. Perché hai deciso di analizzare gli argomenti con Python in primo luogo? –

+0

@Grigory: sto usando uno dei framework scritti in C++ mentre uso principalmente python ... A partire da ora, prima raccolgo i dati e deduco qualcosa da python ..e quindi è necessaria l'inferenza per passare a quel framework C++. A partire da ora, sto salvando tutto in un file di testo nel passaggio intermedio e poi leggo quel file in C++ ma voglio integrarli insieme .. Qual è il modo migliore per farlo. Grazie – Fraz

risposta

5

Come passare il testo generato con Python nello standard input del programma C++? Fondamentalmente, devi usare il modulo subprocess di Python per avviare il programma C++ e scaricare il testo nel suo output standard.

Nel caso in cui sia necessario eseguire il programma C++ separatamente in background, è possibile provare un'altra forma di comunicazione tra processi, come i socket di dominio unix.

Utilizzare boost :: python è anche un'opzione, ma potrebbe essere un po 'più difficile da gestire.

6

per eseguire codice C++ in Python, è possibile utilizzare in modo efficace spinta pitone, ecco un tutorial: http://www.boost.org/doc/libs/1_59_0/libs/python/doc/index.html Si scrive una sorta di involucro esterno si codice C++.

Se è un codice C, python ha una libreria interna chiamata ctypes.

In entrambi i casi, è necessario compilare il codice C/C++ nella libreria condivisa.

1

L'utilizzo di boost.python mi sembra una buona soluzione. Ma a seconda dell'esperienza C++, questo può essere piuttosto complicato. Un buon punto di partenza è qui:

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

Boost.Python consente di esportare le classi C++ e le funzioni di membro a Python per essere in grado di usarli da lì.

2

Un paio di altre opzioni oltre a Boost.python sono SIP e SWIG (Wrapper semplificato e generatore di interfaccia). Come Boost, SIP e SWIG sono open source.

SWIG è particolarmente potente, ma anche un po 'peloso. Fornisce supporto per l'interfacciamento di C e C++ con un carico di barche di altri linguaggi incluso (non un elenco completo) Python, Perl, Lua, Tcl/Tk, Ocaml, Ruby, Java. Un aspetto di SWIG è che analizza le intestazioni C++. Questo ha benefici e insidie. Un vantaggio è che svolge la maggior parte del lavoro di generazione delle interfacce. Uno svantaggio è che non gestisce alcuni degli angoli bui di C++ 2003, e non ha affatto rafforzato il C++ 11. Un altro svantaggio è che la compilazione di un grande progetto diventa lenta. Molto, molto lento.