Daten aus einem C++-Programm an Python übergeben

Python in C/C++ embedden, C-Module, ctypes, Cython, SWIG, SIP etc sind hier richtig.
Antworten
freak2003
User
Beiträge: 8
Registriert: Freitag 26. November 2010, 14:58

Freitag 26. November 2010, 15:15

Hallo,

ich habe ein Problem mit dem Aufruf eines C++-Programms und der Übergabe von Werten aus diesem Programm nach Python.

Ich habe ein Pythonfile das mit subprocess.Popen() ein C++-Programm ausführt. In diesem werden recht umfangreiche Berechnungen ausgeführt. Dabei werden statistische Daten und die Ergebnisse gesammelt und in einer Klasse gespeichert. Diese Daten möchte ich anschließend in Python weiterverwenden.

Die Python-Datei:

Code: Alles auswählen

import subprocess

....
p=subprocess.Popen(test, stdout=out_file, stderr=err_file, cwd=cwd)
p.communicate()

...
Das c++-File:

Code: Alles auswählen

class daten{
  private:
    int laufzeit, result, missing_links;
    double distance;

  public:
    //hier stehen get() und set() methoden
}  
Meine Frage ist nun, wie ich die Daten in der Klasse "daten" an meine python-funktion übergeben kann um sie dort weiter zu verwenden?

Vielen Dank für eure Antworten!!

freak2003
BlackJack

Freitag 26. November 2010, 15:26

@freak2003: Du könntest die Daten in dem C++-Programm zum beispielsweise als Bytestrom, zum Beispiel im JSON- oder XML-Format einfach auf die Standardausgabe ausgeben. Das bekommst Du vom `communicate()`-Aufruf dann ja als `str` geliefert. Falls die Daten sich für das CSV-Format eignen, ginge auch das recht einfach.
freak2003
User
Beiträge: 8
Registriert: Freitag 26. November 2010, 14:58

Freitag 26. November 2010, 17:34

Das Problem ist, dass ich über die Standardausgabe schon andere Sachen ausgebe. Außerdem wollte ich es eher direkt übergeben, falls das geht. Also, dass ich z.B. in Python ein Objekt (z.B. dictionary) anlege und es dann mit einer Funktion in der Klasse Daten in meinem C++ Programm fülle. Ansonsten müsste ich halt den Umweg über ein file gehen, dass ich dann wieder einlese und den Inhalt auswerte. Sowas will ich aber eigentlich net so richtig.

Habt ihr da ne Idee wie ich des mache könnte? :?:
BlackJack

Freitag 26. November 2010, 19:57

@freak2003: Das klingt jetzt ein bisschen danach, dass Du Python in Dein C++-Programm einbetten möchtest. So eine enge Kopplung der Sprachen selber realisiert man in der Regel, indem man eine Sprache in die andere einbettet. Das ist aber auch deutlich aufwändiger als Daten über "Dateien" auszutauschen, seien das nun die Standardein- und ausgaben, "echte" Dateien, oder Pipes.

Was sonst noch ginge, ist dass Du eine Client/Server-Geschichte daraus machst und zum Beispiel die Daten von dem C++-Programm über XML-RPC oder JSON-RPC abfragst.
Antworten