2010-12-03 32 views
3

J'utilise l'API C++ python pour exécuter des commandes python à partir du programme C++. Je veux attraper tous la sortie de python à une chaîne, je l'ai géré par la redirection suivante, pour attraper pythons stdout et stderr:Comment rediriger la sortie de l'interpréteur python et l'attraper dans une chaîne dans le programme C++?

#python script , redirect_python_stdout_stderr.py 
class CatchOutput: 
    def __init__(self): 
     self.value = '' 
    def write(self, txt): 
     self.value += txt 
catchOutput = CatchOutput() 
sys.stdout = catchOutput 
sys.stderr = catchOutput 

#C++ code 
PyObject *pModule = PyImport_AddModule("__main__"); 
PyRun_SimpleString("execfile('redirect_python_stdout_stderr.py')"); 

PyObject *catcher = PyObject_GetAttrString(pModule,"catchOutput"); 

PyObject *output = PyObject_GetAttrString(catcher,"value"); 
char* pythonOutput = PyString_AsString(output); 

Mais je ne sais pas quoi faire pour attraper aussi l'interprète de pythons La sortie ....

+0

Avez-vous lu http://docs.python.org/extending/embedding.html? – nmichaels

Répondre

4

L'interpréteur Python s'exécutera dans votre processus C++, donc toute sa sortie ira vers les stderr et stdout du programme C++ lui-même. Comment capturer cette sortie est décrit dans this answer. Notez qu'avec cette approche, vous n'aurez plus besoin de capturer la sortie dans le script Python - laissez-la simplement aller sur stdout et capturer tout à la fois en C++.