How to refer to the current module?

Mike ckimyt at gmail.com
Mon Jan 7 08:21:42 EST 2008


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



More information about the Python-list mailing list