Comment rediriger la sortie de l'interpréteur python et l'attraper dans une chaîne dans le programme C?

StackOverflow https://stackoverflow.com/questions/4347983

Question

Je suis en utilisant l'API C ++ python pour exécuter des commandes de python de programme de C. Je veux attraper tous la sortie de python à une chaîne, j'ai réussi par la redirection suivante, à des pythons de capture stdout et stderr:

#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 pythons interprète sortie ....

Était-ce utile?

La solution

L'interpréteur Python fonctionnera dans votre processus C ++, de sorte que toute sa production ira au stderr et stdout du programme C ++ lui-même. Comment capturer cette sortie est décrite dans cette réponse . Notez que cette approche vous aurez pas besoin de capturer la sortie dans le script Python plus -. Juste le laisser aller à tout stdout et la capture à la fois en C ++

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top