Line by line execution of python code

mkPyVS mikeminer53 at hotmail.com
Thu Jul 13 18:41:31 EDT 2006


Try this... slightly more complex but get's the job done-> added some
wait state in the user program/thread so it didn't kill the output
stream... Enjoy

import thread, sys, time

def someUserProgram(mutexRef):
        while 1:
                mutexRef.acquire()
                print "I am a user program"
                mutexRef.release()
                time.sleep(1)

class main:
        def __init__(self):
                self.mutex = thread.allocate_lock()
                self.someProgram = None

        def mainProgram(self,someUserProgram):

                self.someProgram = someUserProgram
                self.executeOneStatement(self.someProgram)

                inval = ''
                while not inval == 'q':
                        inval = sys.stdin.readline().strip()
                        print "Doing some stuff here"
                thread.exit()

        def executeOneStatement(self,program):
                thread.start_new(program, (self.mutex,))



l = main()

l.mainProgram(someUserProgram)
Justin Powell wrote:
> Hi, I'm looking for suggestions on how to accomplish something in python.  If
> this is the wrong list for such things, I appologize and please disregard the
> rest.
>
> My application needs to allow users to create scripts which will be executed
> in a statement-by-statement fashion.  Here's a little pseudo-code:
>
> def someUserProgram():
> 	while 1:
> 		print "I am a user program"
>
> def mainProgram():
> 	someProgram = someUserProgram
> 	while 1:
> 		print "Doing some stuff here"
> 		executeOneStatement(someProgram)
>
> def executeOneStatement(program):
> 	# What goes in here?
>
> I would expect the output to look like this:
>
> Doing some stuff here
> Doing some stuff here
> I am a sub program
> Doing some stuff here
> Doing some stuff here
> I am a sub program
> etc.
>
> It's possible to use generators to accomplish this, but unfortunately a
> state-ment by statement executing would require that every other statement is
> a yield.  That would either force the users to put in a yield after every
> statement, or require a mechanism that parses the source and inserts yield
> statement before execution.  Neither of these are really satisfactory
>
> The other methods I've considered for doing this cleanly (subclassing the
> debugger, or the interactive interpreter) seem to revolve around sys.settrace
> and a callback trace function. I couldn't figure out a way to use this
> mechanism to resume the main loop from the trace function, and then also
> resume the user program the next time around, without the call stack just
> spiraling out of control.
>
> Anybody have a solution to this?  I've done a bit of searching, looking
> through python docs and sources and so forth, and I'm pretty stumped at this
> point.
>
> Thanks.
>
> __________________________________________________
> Do You Yahoo!?
> Tired of spam?  Yahoo! Mail has the best spam protection around
> http://mail.yahoo.com




More information about the Python-list mailing list