كيفية إعادة توجيه المترجمة المترجمة Python والقبض عليها في سلسلة في برنامج C ++؟

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

سؤال

أنا أستخدم Python C ++ API لتشغيل أوامر Python من برنامج C ++. أرغب في التقاط جميع إخراج 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 ++ الخاصة بك ، وبالتالي فإن جميع إخراجها سوف ينتقل إلى Stderr و stdout لبرنامج C ++ نفسه. يتم وصف كيفية التقاط هذا المخرج في هذا الجواب. لاحظ أنه مع هذا النهج ، لن تحتاج إلى التقاط الإخراج في البرنامج النصي Python بعد الآن - فقط دعه يذهب إلى stdout والتقاط كل شيء مرة واحدة في C ++.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top