On May 8, 2012, at 3:07 PM, F L wrote: > Hello everyone, > > We are trying to implement our own interactive interpreter in our application > using an embedded Python interpreter. > > I was wondering what would be the best way to retreive as text the result of > executing Python code. The text must be exactly the same as it would be in the > standalone interpreter. > > We used to do this by changing the embedded interpreter's sys.stdout and > sys.stderr > with a FILE created in C++. We could then execute code using the > PyRun_InteractiveOne > function and easily retrieve the result from the FILE. The problem is, our > application > shouldn't create any files if possible. > > We also tried replacing sys.stdout and sys.stderr with a custom made Python > object > which could be more easily read from C++. We then used the function > PyRun_String > to execute the code. The problem here is that using the Py_file_input start > token > doesn't write everything we need to sys.stdout. (i.e. executing 2+2 does not > write 4). > It also doesn't print a traceback to sys.stderr when there is an exception. > Using the > other two start tokens is impossible since we need to be able to execute more > than > one instruction at once. We also tried using the function PyRun_SimpleString > but we > encounter the same problems. > > We are using python 2.7. > > Any suggestions? > > Thank you for your time.
[byte] I'm pretty new to Python myself, and I may not understand what you are trying to do, but have you looked at the subprocess module? Documented here: http://docs.python.org/library/subprocess.html Using subprocess.Popen would let you hook stdin and staout directly to pipes that will pass data back to the calling program with no intermediate steps. -Bill
-- http://mail.python.org/mailman/listinfo/python-list