Wie Python-Interpreter Ausgabe und fangen sie in einem String in C ++ Programm umleiten?
-
30-09-2019 - |
Frage
Ich bin mit Python C ++ API Python Befehle von C ++ Programm auszuführen. Ich möchte alle Python Ausgabe in einen String fangen, ich habe durch die folgende Umleitung verwaltet werden, zu fangen Pythons stdout und stderr-Ausgabe:
#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);
Aber ich weiß nicht, was auch Pythons zu tun zu fangen Interpreter Ausgabe ....
Lösung
Der Interpreter Python wird in Ihrem C ++ Prozess ausgeführt, so dass alle seine Ausgabe an die stderr und stdout des C gehen ++ Programm selbst. Wie diese Ausgabe erfassen ist in diese Antwort . Beachten Sie, dass mit diesem Ansatz werden Sie nicht die Ausgabe in dem Python-Skript nicht mehr erfassen müssen -. Lass es einfach gehen zu stdout und erfassen alles auf einmal in C ++
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow