2010-12-03 2 views
3

파이썬 C++ API를 사용하여 C++ 프로그램에서 파이썬 명령을 실행하고 있습니다. 나는, 문자열에 대한 모든 파이썬 출력, 나는 다음과 같은 리디렉션에 의해 관리했습니다 잡으려고 비단뱀의 표준 출력과 표준 에러 출력을 잡으려면 :어떻게 파이썬 인터프리터 출력을 리디렉션하고 C++ 프로그램의 문자열에 잡으려고합니까?

#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); 

을 그러나 나는 또한 비단뱀 인터프리터를 잡기 위해 무엇을 해야할지하지 않습니다 출력 ....

+0

http://docs.python.org/extending/embedding.html을 읽어 보셨습니까? – nmichaels

답변

4

파이썬 인터프리터는 C++ 프로세스 내에서 실행되므로 모든 출력은 C++ 프로그램 자체의 stderr 및 stdout으로 이동합니다. 이 출력을 캡처하는 방법은 this answer에 설명되어 있습니다. 이 접근법을 사용하면 Python 스크립트의 출력을 더 이상 캡처 할 필요가 없습니다. 단지 C++에서 stdout으로 가서 모든 것을 캡처하도록하십시오.