Cómo redirigir la salida intérprete de Python y atraparlo en una cadena en el programa de C ++?
-
30-09-2019 - |
Pregunta
estoy usando Python C ++ API para ejecutar comandos de Python desde el programa C ++. Quiero coger toda la salida de pitón en una cadena, he conseguido por el siguiente cambio de dirección, de pitones de captura stdout y stderr de salida:
#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);
Pero no sé qué hacer para atrapar también pitones intérprete de salida ....
Solución
El intérprete de Python se ejecutará dentro de su proceso de C ++, por lo que toda su producción se destinará a la stderr y stdout del programa en sí ++ C. Cómo capturar esta salida se describe en esta respuesta . Tenga en cuenta que con este enfoque no será necesario capturar la salida de la secuencia de comandos de Python más -. Acaba de dejarlo ir hacia la salida estándar y captura de todo a la vez en C ++