2013-04-30 7 views
7

Ich habe ein C++ - Programm, mit dem ich Python-Skripte ausführen kann, an die C++ Daten weiterleitet. Wenn das Python-Skript fehlschlägt, ruft das C++ - Programm PyRun_InteractiveLoop auf, um das Problem auf einer interaktiven Shell untersuchen zu können. Das funktioniert gut, aber ich dachte "Wäre cool, wenn IPython installiert ist, könnte ich es in diesem Fall verwenden".Einbetten von IPython-Shell in C/C++ - Programm

Jetzt ist mein Problem: Alles was ich finde, wenn ich nach "ipython embedding" suche, ist eine Anleitung, wie man IPython in Python-Programme einbetten kann (ua http://ipython.org/ipython-doc/dev/interactive/reference.html#embedding-ipython). Ich habe versucht, diese auf der eingebetteten regulären Python-Shell zu reproduzieren, die ich habe, aber die meisten von ihnen scheitern irgendwie (normalerweise wegen einer fehlenden sys.argv .... die ich lösen kann).

Irgendwelche Vorschläge, wie man das macht? Mein erster Plan wäre gewesen, zuerst IPython über die C-API (die ich abgedeckt habe) zu importieren. Wenn das fehlschlägt, benutze die "normale" Shell. Andernfalls rufen IPython.embed() (oder ähnlich) über PyRun_InteractiveOneFlags

Antwort

0

Haben Sie python debugger mit betrachtet

>>> import pdb 
>>> import yourmodule 
>>> pdb.run('yourmodule.test()') 
+0

a) das funktioniert sowieso b) es nicht das, was ich will. Der übliche Workflow ist "Skript schlägt fehl - zum Beispiel 'Matrix-Dimensionen stimmen nicht überein. Inspizieren Sie den Arbeitsbereich, um zu sehen, wie das Skript zu reparieren ist" und dafür würden die Funktionen von IPython (zum Beispiel Tab-Completion) die Dinge viel komfortabler machen. Und ich muss es in das C++ - Programm einbetten, da die Daten vom C++ - Programm übergeben werden – bgschaid