By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
448,652 Members | 1,694 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 448,652 IT Pros & Developers. It's quick & easy.

How to refer to the current module?

P: n/a
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
Jan 7 '08 #1
Share this Question
Share on Google+
4 Replies


P: n/a
2008/1/7, Mike <ck****@gmail.com>:
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?
globals() =)
>
Thanks in advance for all advice!

Mike
--
http://mail.python.org/mailman/listinfo/python-list

--
-- Guilherme H. Polo Goncalves
Jan 7 '08 #2

P: n/a
Sweet! Thanks!

Mike

On Jan 7, 8:30 am, "Guilherme Polo" <ggp...@gmail.comwrote:
>
globals() =)
Jan 7 '08 #3

P: n/a
Mike wrote:
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?
globals() for the current name space

import sys
sys.modules[__name__] gets you the module object

Christian

Jan 7 '08 #4

P: n/a
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__.
Jan 7 '08 #5

This discussion thread is closed

Replies have been disabled for this discussion.