How to refer to the current module?

Stargaming stargaming at gmail.com
Tue Jan 8 00:40:28 CET 2008


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__.



More information about the Python-list mailing list