如何重定向Python解释器输出并在C ++程序中的字符串中捕获?
-
30-09-2019 - |
题
我正在使用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解释器输出。
解决方案
Python解释器将在您的C ++进程中运行,因此其所有输出都将转到C ++程序本身的stderr和Stdout。如何捕获此输出在 这个答案. 。请注意,使用这种方法,您无需再捕获Python脚本中的输出 - 只需让它转到Stdout并在C ++中立即捕获所有内容。
不隶属于 StackOverflow