Using switches with exec?
Premshree Pillai
premshree_python at yahoo.co.in
Mon Jan 12 15:00:25 EST 2004
More information about the Python-list mailing list
Mon Jan 12 15:00:25 EST 2004
- Previous message (by thread): Using switches with exec?
- Next message (by thread): Using switches with exec?
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
--- Francis Avila <francisgavila at yahoo.com> wrote: > Premshree Pillai wrote in message ... > > --- "Diez B. Roggisch" <nospam-deets at web.de> > wrote: > > >> I need to run a Python program dynamically within > >> > another program. I am using exec for the > purpose. > >> Is > >> > there a way to pass parameter switches to exec? > >> > >> You can pass a globals-dictionary to exec, which > can > >> hold the switches > >> values. > >> > >> Diez > >> -- > >> > http://mail.python.org/mailman/listinfo/python-list > > > >Could you please elucidate with a sample script. > >Suppose I need to pass the switch "-w" to the > >dynamically loaded code (using eval()/exec()). > >Any help is appreciated. > > > >-Premshree > > > > What do you mean by a parameter switch? You mean a > command-line switch? > > If this is what you mean, it seems you're mixing > concepts. If you run the > Python program as an external program, just do so > using os.system or > os.popen or such--the fact that it's written in > Python makes no difference, > and exec/execfile is not involved. os.system('python > mypythonprg -w'), for > example. > > If you want to have Python code from one program > exposed to another, the > best approach is to write a module which can be used > either as a library or > a stand-alone program. The idiom is to put > something like this: > > if __name__ == '__main__': main() > > at the bottom of your code. When you run this file > alone, main() will be > executed; if you import the file, it won't be. > > If you really need to execute external Python code > internally (and it's very > rare and special circumstances where you'd want to), > use execfile(). > > Now, if you're using execfile, it is unlikely that > the code you're running > would use command line switches--this implies that > it's a stand-alone > program, in which case you should either be running > it externally (as in > first solution above) or importing it, and providing > a mechanism to use it > programmatically. This is why I say you seem to be > mixing concepts. > > That said, command line arguments are available via > sys.argv, and this is > most likely how the external program accesses them. > You can modify sys.argv > before execfile(). > > This, however, is a mess, because you clobber the > global sys.argv of the > original program. You need to somehow redirect any > access to sys.argv by > the script. You can do so like this: > > >>> sys.argv > [''] > >>> class ShadowObject(object): > ... def __init__(self, shadowed, **override): > ... """Shadow attr access to shadowed with > override.""" > ... self.__dict__.update(override) > ... self.shadowed = shadowed > ... def __getattr__(self, attr): > ... """Called only if attr was not in > override.""" > ... return getattr(self.shadowed, attr) > ... > >>> exec '''print sys.argv #We get the > right one? > ... print sys.getdefaultencoding() #Make sure we're > shadowing. > ... sys.argv = sys.argv[-1:] #Test > reassignments. > ... print sys.argv > ... ''' in globals(), {'sys':ShadowObject(sys, > argv=['progname','-w'])} > ['progname', '-w'] > latin-1 > ['-w'] > >>> sys.argv # the real sys.argv is unchanged > [''] > > Don't do this. It's almost certainly not the best > way to do what you want. > Why don't you tell us your broader task, and maybe > we can suggest something > more Pythonic? > -- > Francis Avila > > -- > http://mail.python.org/mailman/listinfo/python-list Hmm...maybe I should have been clearer. What I need to do is run an external Python code from within another program, and while doing so I need to pas a switch (yes, like a command-line switch) to this code; i.e., I need to open an external Py program from within another Py program... Hope I'm clear this time around... -Premshree ________________________________________________________________________ Yahoo! India Mobile: Download the latest polyphonic ringtones. Go to http://in.mobile.yahoo.com
- Previous message (by thread): Using switches with exec?
- Next message (by thread): Using switches with exec?
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
More information about the Python-list mailing list