At Fri, 10 Mar 2006 22:13:05 -0800, Brian Granger wrote:
In our system, we can easily imagine a user making dozens of interactive calls like this over short periods of time. When all of these results are available essentially immediately, it iseems like overkill to have a more complicated UI. But, it is very appropriate to use Twisted underneath, because it really is an asynchronous system and all the error detection and handling is best dealt with that asynchronously. But as long as there are no errors, I woult like the Twisted machinery to just pass along the result directly.
It sounds like you need to teach your interpreter to deal with deferreds. I'd do something very vaugely like this: def eval_loop(result): print result expression = raw_input(">>> ") d = maybeDeferred(eval(expression)) d.addCallback(lambda r:reactor.callLater(eval_loop, r)) reactor.callWhenRunning(eval_loop, "Welcome to StupidPython") reactor.run() Obviously this is not the correct way to implement an interpreter and I don't know whether I've remembered all the names and signatures correctly, but hopefully it conveys the idea. Mike.