Seite 1 von 1

Python-Interpreter / Embedding

Verfasst: Donnerstag 12. November 2009, 21:14
von Maple99
Hi @all,

ich habe mal eine Frage zum Einbetten von Pyton in C. Ich habe schon die Python/C-API Referenz gelesen, aber ich weiß dennoch nicht ganz genau wie ich mir das vorstellen muss.
Wenn ich Python einbetten möchte, schreibe ich ja ein "ganz normales" C-Programm. An irgendeiner Stelle kommt dann ein Py_Initialize()-Aufruf.
Von da an kann ich dann ja die API-Funktionen nutzen. Die Frage ist aber wie ich mir das vorzustellen habe. Wird da im Hintergrund ein Thread oder vielleicht sogar ein Prozess gestartet,
der quasi global zugänglich ist und wie ein Interpreter ohne Eingabemaske werkelt oder initialisiert der Aufruf einfach "ein paar" Variablen und ich nutze dann direkt C-Funktionen,
die auch der Interpreter benutzt den ich von der Kommandozeile starte und wo ich dann meine Befehle eintippe oder Module/Skripts zur Ausführung bringe?? Also die Frage ist WAS ist der Interpreter an dieser Stelle?
Vielleicht könnte mir das jemand erklären wie man sich das vorzustellen hat. Wie man vielleicht merkt fehlt mir diese ein wenig, aber ich hoffe dem kann jemand Abhilfe leisten ;)
Schon mal vielen Dank im Voraus.

Jonny

Verfasst: Donnerstag 12. November 2009, 21:24
von theliquidwave
Pro Instanz deines Programmes wird eine Instanz von Python gestartet. Lädst du DLLs in dein Programm, so wird die Instanz deines Programms via Py_Initialize() verwendet.

Gruß

Verfasst: Donnerstag 12. November 2009, 21:30
von Maple99
Hi,

danke für deine schnelle Antwort. Du meinst es wird ein neuer Betriebssystem-Prozess gestartet? Oder wird ein zusätzlicher Thread in meinem Prozess gestartet oder meinst du etwas ganz anderes mit Instanz?

Verfasst: Donnerstag 12. November 2009, 21:53
von theliquidwave
Keine Ahnung wie das geregelt wird. Bei mir ist es jedenfalls so, dass wenn ich mein Programm 2x ausführe beide Programme VÖLLIG unabhängig voneinander laufen. Wenn ich also im Programm A das Modul "bla" bereitstelle und Programm B öffne, so ist dieses NICHT verfügbar. Sollte ich aber eine DLL in Programm A laden, wird die Instanz von Programm A verwendet. Ergo: In der DLL ist Modul "bla" verfügbar.

Gruß