On Sun, Oct 08, 2006 at 12:36:32PM +0530, Noufal Ibrahim wrote: > Greetings everyone, > I'm working on a little project that's similar to tcltutor for python. > I have a string which has some python code. I "compile" and "eval" this > to get the output. So far so good. However, when this happens, the > evaluation is happening in the current namespace so I'm afraid of > symbols being redefined and messed up. > What I want to do is to create a separate namespace for all the code so > that I can execute it without worrying about symbol mangling. > > Something like if the code I have is > code = """ > x=5 > if x==5: > print "Yes" > else: > print "No" > """ > > I'd like to be able to create a separate module called (say) "tester" > with contents > > def __start_exec__(): > <contents of the code variable> > > then say something like > import tester > tester.__start_exec__() > > to actually run the code. This way, the namespace would be separate. >
Two points: 1. (Stating something obvious) Code in a module, when called, does run in a separate namespace. For example, if I run: import modB modB.f() then any variables set in modB are local to modB. 2. If that separation of namespaces is not "strong" enough for you, try something like the following: exec somecode in globalDict where globalDict is a dictionary. globalDict will be the namespace used by somecode, and, for example, variables created (perhaps using assignment) in somecode will be created in globalDict rather than in the current namespace. See: http://docs.python.org/ref/exec.html. Dave -- Dave Kuhlman http://www.rexx.com/~dkuhlman _______________________________________________ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor