Как перенаправить вывод интерпретатора Python и поймать его в строку в программе C ++? - PullRequest
3 голосов
/ 03 декабря 2010

Я использую 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);

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

1 Ответ

4 голосов
/ 03 декабря 2010

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

...