How to execute a file outside module's namespace?

Slawomir Nowaczyk slawomir.nowaczyk.847 at student.lu.se
Thu Aug 10 15:30:14 EDT 2006


On Fri, 11 Aug 2006 01:23:14 +0800
Angelo Zhou <mzhou at cs.hku.hk> wrote:

#> Slawomir Nowaczyk wrote:
#> > Hello,
#> > 
#> > Let's say I have a module "emacs", defining function eexecfile(file):
#> > 
#> > def eexecfile(file):
#> >     # do other stuff
#> >     execfile(file,globals())
#> >     # do other stuff
#> > 
#> > Now, assume I have file test.py containing an assignment "x=1"
#> > 
#> > If I run python and do:
#> > 
#> > import emacs
#> > emacs.eexecfile("test.py")
#> > print emacs.x   # works, x was put in module namespace
#> > print x         # doesn't work, x is not defined in main script namespace
#> > 
#> > What is the best way to make "print x" work? Using the following:
#> > 
#> > import __main__
#> > def eexecfile(file):
#> >     # do other stuff
#> >     execfile(file, __main__.__dict__)
#> >     # do other stuff
#> > 
#> > seems to work, but it gives me a slightly uneasy feeling. Is this the
#> > right way?
#> > 
#> 
#> "from emacs import x" will expose x to the current namespace

True... but I do not know in advance what is the contents of test.py
file -- it could be "a=1" :) Sure, I could go over emacs.__dict__ and
expose everything except eexecfile, but that's even less satisfying
than the solution above.

Anyway, thanks for the suggestion.

-- 
 Best wishes,
   Slawomir Nowaczyk
     ( Slawomir.Nowaczyk at cs.lth.se )

Zawinski's Law: "Every program attempts to expand until it can read mail.
Those programs which cannot so expand are replaced by ones which can."




More information about the Python-list mailing list