如何重定向python解释器输出并在C ++程序中的字符串中捕获它?

时间:2010-12-03 17:06:21

标签: c++ python redirect python-c-api python-embedding

我正在使用python C ++ API从C ++程序运行python命令。我想将所有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解释器输出....

1 个答案:

答案 0 :(得分:4)

Python解释器将在C ++进程中运行,因此它的所有输出都将转到C ++程序本身的stderr和stdout。 this answer中描述了如何捕获此输出。请注意,使用这种方法,您不再需要在Python脚本中捕获输出 - 只需让它转到stdout并在C ++中一次捕获所有内容。