Как перенаправить вывод интерпретатора Python и поймать его в строке в программе C ++?

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

Вопрос

Я использую Python C ++ API для запуска команд Python из программы C ++. Я хочу поймать весь вывод Python в строку, у меня удалось следующее перенаправление, чтобы поймать вывод Pythons Stdout и 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);

Но я не знаю, что делать, чтобы поймать также вывод интерпретатора Pythons ....

Это было полезно?

Решение

Переводчик Python будет работать в вашем процессе C ++, поэтому весь его вывод будет переходить к STDERR и STDOUT самой программы C ++. Как захватить этот выход описан в Этот ответ. Отказ Обратите внимание, что с таким подходом вам не нужно будет захватывать выходные данные в сценарии Python - просто позвольте ему перейти к STDOUT и захватить все сразу в C ++.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top