[Python-de] stdout bei embedding in Windows-Anwendungen

Thomas Schreiner spam at tschreiner.org
Di Sep 18 17:35:45 UTC 2007


Hallo,

ich erweitere gerade eine Windows-Anwendung (C++) durch embedding von 
Python-Aufrufen. Es scheint ein bekanntes Problem zu sein, dass diese 
Anwendungen sich sofort von der aufrufenden Konsole detachen, so dass 
jegliche Ausgabe an stdout (sowohl von C++ als auch von Python) im 
Nirwana verschwindet.

Ein Workaround scheint zu sein, sich eine Windows-Konsole anzufordern 
und stdout darauf umzuleiten:

   AllocConsole();
   freopen("conin$", "r", stdin);
   freopen("conout$", "w", stdout);
   freopen("conout$", "w", stderr);

Allerdings zeigt diese Konsole dann nur den Output meines C++-Programmes 
an und seltsamerweise nicht den der eingebetteten Python-Befehle.

Der Programmteil
   Py_Initialize();
   std::cout << "start printing..." << std::endl;
   PyRun_SimpleString("print('PRINT')\n");
   std::cout << "done printing." << std::endl;
liefert lediglich die Ausgabe

   start printing...
   done printing.

Weiss da jemand Rat?

Beste Gruesse und besten Dank,


Thomas Schreiner