编程语言
首页 > 编程语言> > 如何重定向python解释器输出并将其捕获在C程序的字符串中?

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

作者:互联网

我正在使用python C API从C程序运行python命令.我想将所有python输出都捕获到一个字符串中,由以下重定向进行管理,以捕获python 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);

但是我不知道该怎么做才能捕获python解释器输出..

解决方法:

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

标签:redirect,python-c-api,python-embedding,python,c-4
来源: https://codeday.me/bug/20191105/1996473.html