كيفية إعادة توجيه المترجمة المترجمة Python والقبض عليها في سلسلة في برنامج C ++؟
-
30-09-2019 - |
سؤال
أنا أستخدم 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 ++.
لا تنتمي إلى StackOverflow