[Python-de] Python in c++ einbetten

Georg Mischler schorsch at schorsch.com
Sam Sep 6 06:25:48 CEST 2003


Stoneyard wrote:

> giebt es eine Moeglichkeit, den Pythoninterpreten direkt Befehle zu senden,
> und Ergebnisse / Ausgaben zu erhalten? Ich versuche gerade Python in einem
> c++ Programm einzubetten, das unter anderem als Konsole dienen soll. Dazu
> muss es Code vom Interpreten ausfuehren lassen, und die Ausgaben zurueck
> leiten.

Du solltest dich erst mal entscheiden, ob du einen Rueckgabewert
haben willst, oder ob du sys.stdout abfangen moechtest.


> Leider liefert PyRun_SimpleString keine brauchbaren Rueckgaben.

PyRun_SimpleString() evaluiert Statements, da gibt es also keinen
Rueckgabewert. Damit bleibt dir in diesem Fall nur sys.stdout,
also alles was der Python Code z.B. mit "print" rausschreibt.
Was immer du dir als Ersatz zu sys.stdout einfallen laesst, muss
(glaube ich) mindests die Methode write() unterstuetzen, die Doku
wird dir mehr dazu verraten.

Alternativ gibt es auch die Moeglichkeit, Ausdruecke (Expressions)
zu evaluieren, welche einen Rueckgabewert liefern. Mein Vorgehen
zu diesem Zweck laesst sich schematisch so zusammenfassen:

s = "2 + 5 * 7.3";
m = PyImport_AddModule("__main__");
d = PyModule_GetDict(m);
c = Py_CompileString(s, "<string>", Py_eval_input);
r = PyEval_EvalCode((PyCodeObject *)c, d, d);

Das Objekt r enthaelt das Ergebnis der Evaluation von s, und kann
in die entsprechenden C/C++ Typen umgewandelt werden.

VORSICHT:
  Fehlerabfragen und Speichermanagement (reference counting) sind in
  dieser Darstellung ausgelassen. Konsultiere dazu die Dokumentation.


> Giebt es also z.B. ein Kommando, das Pythoncode mit den Parameter Pipe  und
> String ausfuehrt, oder eine Moeglichkeit, sdtin und stdout doch irgendie
> umzuleiten?

Da es sich nicht um einen seperaten Prozess handelt, steht so
etwas nicht direkt zur Verfuegung. Du kannst es aber mit den oben
beschriebenen Werkzeugen selber simulieren.


> Gruss, Stoneyard

Die Verwendung von Realnamen gehoert hier uebrigens zum guten Ton.


-schorsch

-- 
Georg Mischler  --  simulations developer  --  schorsch at schorsch com
+schorsch.com+  --  lighting design tools  --  http://www.schorsch.com/