On 19.07.2017 23:25, Jian wrote: > > Dear Gurus, > > I want to embed python interpreter in my program. What I want is to > redirect those output to a control such as RICHEDIT which can be > modified as a output window in my program. So I can write *.py files > outside of program and invoke it inside program as a script file. In > order to get information output by the *.py file I need to get the > stdin&stdout. I have tried some workflow but not perfect. >
So you want to capture all output produced by the Python session, without changing the behaviour of `std::cout` or `printf()`, correct ? > 1). I have tried use Allocconsle(). But I can only get the output info > printed by std::out & printf() in the current code. all things which > are printed by python35.dll are missing. I used print('xxxx') in the > *.py file to test the output. Those *.py files are OK in command line > mode. > > 2). I also tried to derive class basic_streambuf and overwrite the > in/out functions. It works only for output from std::out. Text from > printf() as well as from dlls are missing. > > 3). then I tried to use linker settings as below. > > #pragma comment( linker, "/subsystem:console /entry:wWinMainCRTStartup" ) > > A cmd window is created along with the program. everything output from > current process and dlls are retrieved successfully as I want. But the > cmd window is not easy to control. > > Is there a better way for this purpose? > I suggest you import the `sys` module and substitute `sys.stdout` and `sys.stderr` to capture output rather than send to stdout and stderr. The technique is described in many places, for example https://www.blog.pythonlibrary.org/2016/06/16/python-101-redirecting-stdout/. Please be aware that due to the way Python3 changed its representation of strings (, unicode, bytes, etc.) you may have to be careful to find a solution that works portably. You could do this either in a Python wrapper script, or directly in the code you use to initialize your Python session (in C++). I'm only a casual Windows user (and even less programmer), so can't comment on any Windows-specific idioms to use. HTH, Stefan -- ...ich hab' noch einen Koffer in Berlin... _______________________________________________ Cplusplus-sig mailing list Cplusplus-sig@python.org https://mail.python.org/mailman/listinfo/cplusplus-sig