我正在使用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解释器输出....
答案 0 :(得分:4)
Python解释器将在C ++进程中运行,因此它的所有输出都将转到C ++程序本身的stderr和stdout。 this answer中描述了如何捕获此输出。请注意,使用这种方法,您不再需要在Python脚本中捕获输出 - 只需让它转到stdout并在C ++中一次捕获所有内容。