2012-06-20 20 views
5

Ich möchte einen Code helloword.cpp ausführen, die einige Argumente aus der Konsole übernimmt analysiert diese Argumente und dann "Hallo Welt" in der Konsole.running C++ - Code von Python

Jetzt will ich parsearguments.py

So zum Beispiel diese Argumente aus einem Python-Skripte analysieren:

def parse_arguments: 
    ...# some code 
    return arguments 

Nun, wie kommuniziere ich zwischen Python und C++. Ich habe gelesen und sehe, dass Cython, Boost Python sind die Optionen, aber ich habe eine harte Zeit finden die richtige einfache Hallo Welt Beispiel.

Alle Vorschläge werden geschätzt. Danke

+5

Man führt keinen C++ - Quellcode aus. –

+0

Ihre Lösung klingt nicht gut für mich, aber vielleicht fehlt mir etwas Kontext. Warum haben Sie sich entschieden, Argumente mit Python zu analysieren? –

+0

@Grigory: Ich verwende eines der in C++ geschriebenen Frameworks, während ich hauptsächlich Python benutze ... Ab sofort sammle ich zuerst die Daten und folge etwas aus Python ..und dann muss diese Inferenz an dieses C++ - Framework übergeben werden. Ab jetzt speichere ich alles in einer Textdatei im Zwischenschritt und lese dann diese Datei nach C++, aber ich möchte sie zusammen integrieren. Was ist der beste Weg, dies zu tun. Danke – Fraz

Antwort

5

Wie wäre es mit der Weitergabe von Text, den Sie mit Python generieren, in die Standardeingabe Ihres C++ Programms? Im Grunde müssen Sie Pythons subprocess Modul verwenden, um das C++ - Programm zu starten und den Text in seine Standardausgabe zu schreiben.

Für den Fall, dass Ihr C++ - Programm separat im Hintergrund ausgeführt werden muss, könnten Sie eine andere Form der Interprozesskommunikation versuchen, wie Unix-Domain-Sockets.

Mit boost :: python ist auch eine Option, aber es könnte ein wenig schwieriger sein, damit umzugehen.

6

C++ Code in Python ausführen zu können, könnten Sie effektiv boost Python verwenden, hier ist ein Tutorial: http://www.boost.org/doc/libs/1_59_0/libs/python/doc/index.html Sie eine Art Wrapper außerhalb Sie C++ Code zu schreiben.

Wenn es C-Code ist, hat Python interne Bibliothek namens Ctypes.

In beiden Fällen sollten Sie den C/C++ - Code in eine gemeinsam genutzte Bibliothek kompilieren.

1

Boost.python klingt wie eine gute Lösung für mich. Aber abhängig von Ihrer C++ Erfahrung kann dies ziemlich schwierig sein. Ein guter Punkt zu starten, ist hier:

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

Boost.Python ermöglicht es Ihnen, C++ Klassen und Member-Funktionen in Python zu exportieren, um sie von dort aus in der Lage sein zu verwenden.

2

Ein paar andere Optionen neben Boost.python sind SIP und SWIG (Simplified Wrapper und Interface Generator). Wie Boost sind SIP und SWIG Open Source.

SWIG ist besonders kraftvoll, aber auch etwas haarig. Es bietet Unterstützung für die Schnittstellen C und C++ mit einer Schiffsladung von anderen Sprachen einschließlich (keine vollständige Liste) Python, Perl, Lua, Tcl/Tk, Ocaml, Ruby, Java. Ein Aspekt von SWIG ist, dass es Ihre C++ - Header analysiert. Dies hat Vorteile und Fallstricke. Ein Vorteil ist, dass es die meiste Arbeit an der Erzeugung der Schnittstellen leistet. Ein Nachteil ist, dass es einige der dunklen Ecken von C++ 2003 nicht behandelt, und es ist überhaupt nicht auf C++ 11 gestiegen. Ein weiterer Nachteil ist, dass die Zusammenstellung eines großen Projekts langsam wird. Sehr, sehr langsam.