Pythonインタープリターの出力をリダイレクトし、C ++プログラムの文字列でキャッチする方法は?

StackOverflow https://stackoverflow.com/questions/4347983

質問

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

しかし、私はパイソンインタープリターの出力をキャッチするために何をすべきかわかりません。

役に立ちましたか?

解決

PythonインタープリターはC ++プロセス内で実行されるため、すべての出力はC ++プログラム自体のSTDERとSTDOUTに移動します。この出力をキャプチャする方法は、で説明されています この答え. 。このアプローチでは、Pythonスクリプトの出力をこれ以上キャプチャする必要はありません。STDOUTに移動して、C ++ですべてを一度にキャプチャするだけです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top