an eval()-like exec()

Abel Daniel abli at freemail.hu
Mon Aug 27 14:59:25 EDT 2007


Hi!

A python interactive interpreter works by having the user type in some
code, compiling and running that code, then printing the results. For
printing, the results are turned into strings.

I would like make an interpreter which does this, without the last
part: i.e. where the results are returned as objects, instead of as
strings. I.e. have I would like to see something that behaves like
this:

>>> ip = MyInterpreter()
# this started a new interpreter
>>> ip.run("import math") is None
True
>>> ip.run("math.pi") is math.pi
True

Neither exec() or eval() is usable for this, as far as I see, because
eval can't handle arbitrary python code (eval("import math") ), and
exec() doesn't return the results.

Subclassing an code.InteractiveInterpreter or code.InteractiveConsole
seems like a usable idea, but I couldn't find out what to do to get
the results before they are turned into strings.

Using compile() and then eval() didn't seem usable either.

Any ideas?

Thanks in advance,
Daniel Abel




More information about the Python-list mailing list