how to get the output of embedded python?
Jean-Luc Fontaine
jfontain at winealley.com
Thu Feb 15 08:56:45 EST 2001
David Bolen wrote:
> Jean-Luc Fontaine <jfontain at winealley.com> writes:
>
> > Yes. That is whatever output you would see when in interactive mode, if
> > that makes any sense...
>
> Oh, I think I understand better. You don't actually want to trap any
> output generated during the execution of the code - you just want to
> deal with the result of the expression you may be evaluating.
>
> > That does not seem to matter in other scripting languages, such as Tcl
> > or Perl: calling an internal eval C function with a script as argument
> > returns the result of the script (not what comes out on stdout or
> > stderr), which may be empty.
> >
> > For example, if I define a function foo that returns a string, invoking
> > eval("foo()") in C would return that string. Is not that the behavior of
> > python in interactive mode, for example?
>
> On an expression by expression basis, yes, each expression has a
> result object (but not statements such as "print" for example).
>
> You should be able to handle the same thing from your controlling code
> by dipping a little lower than the "Simple" high level functions. By
> using either PyRun_File or PyRun_String you can evaluate Python code,
> and the result of the function is the resulting Python object (a
> PyObject *). Use PyEval_GetGlobals and PyEval_GetLocals for the
> dictionaries to supply to the execution.
>
> Once you have the resulting object pointer you can do anything you
> want with it (using any of the Python functions available for
> extending/embedding applications), including converting it into a
> string representation if you like. Note that the result does not
> itself have to be a string object, since a Python expression can
> result in any Python object. Check out the abstract and concrete
> objects layer in the C/API reference or the Python source for all
> sorts of functions.
>
> But if you know you want a string representation, you should be able
> to use something like PyObject_Str to return a new Python object with
> a string representation of the result object. Then, if you just want
> a char*, use PyString_AsString.
>
> --
Thank you so very much for all this information: that is what I needed to
get started.
--
Jean-Luc Fontaine mailto:jfontain at winealley.com http://www.winealley.com
More information about the Python-list
mailing list