On Mon, 07 Jan 2008 05:21:42 -0800, Mike wrote: > I want to do something like the following (let's pretend that this is in > file 'driver.py'): > > #!/bin/env python > > import sys > > def foo(): > print 'foo' > > def bar(arg): > print 'bar with %r' % arg > > def main(): > getattr(driver, sys.argv[1])(*sys.argv[2:]) > > if __name__=='__main__': > main() > > > Essentially what I'm trying to get at here is dynamic function > redirection, like a generic dispatch script. I could call this as > > python driver.py foo > > or > > python driver.py bar 15 > > and at any time later I can add new functions to driver.py without > having to update a dispatch dict or what-have-you. > > The problem is, 'driver' doesn't exist in main() line 1. If I 'import > driver' from the command line, then getattr(driver, ...) works, but it's > not bound here. > > Is there any way around this? Can I somehow scope the 'current module' > and give getattr(...) an object that will (at run time) have the > appropriate bindings? > > Thanks in advance for all advice! > > Mike
`__main__` (after you did ``import __main__``) could be an option as well. But I'd prefer a custom dictionary for your dispatch, rather than some magic with the module's names. See http://docs.python.org/ref/programs.html for details on __main__. -- http://mail.python.org/mailman/listinfo/python-list