Hi John! If you want to embed python in c++ app and exchange data between c++ and python, take a look at the boost::python library. It's also a platform independent solution (my app's target platforms are windows vs2015 and linux CentOS7).
You can do something like this: using namespace boost::python; Py_Initialize(); try { boost::python::object main_module = boost::python::import("__main__"); boost::python::object main_namespace = main_module.attr("__dict__"); boost::python::dict mydata; mydata["x"] = 5; mydata["foo"] = boost::python::dict(); mydata["foo"]["bar1"] = "data1"; mydata["foo"]["bar2"] = "data2"; // you can declare variables in the python namespace from c++ main_namespace["mydata"] = mydata; // in the script there is a mydata variable: {'x': 5, 'foo': {'bar1': 'data1', 'bar2': 'data2'}} boost::python::object ignored = exec_file("script.py", main_namespace, main_namespace); // declare a variable named return_value in the script, // and you can extract it's value to c++ like this std::wstring output = extract<std::wstring>(main_namespace["return_value"]); } catch( boost::python::error_already_set) { PyErr_Print(); } (If your python script has some output, don't forget to redirect boost std::cout etc) Best regards: Imre 2017. 07. 20, csütörtök keltezéssel 11.25-kor Jian ezt írta: > 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. > > 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? > > Thanks in advance for your kind help. > > Best Regards, > > John. > > > > > > > _______________________________________________ > Cplusplus-sig mailing list > Cplusplus-sig@python.org > https://mail.python.org/mailman/listinfo/cplusplus-sig _______________________________________________ Cplusplus-sig mailing list Cplusplus-sig@python.org https://mail.python.org/mailman/listinfo/cplusplus-sig