Comment rediriger la sortie de l'interpréteur python et l'attraper dans une chaîne dans le programme C?
-
30-09-2019 - |
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 ....
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