471,339 Members | 1,370 Online
Bytes | Software Development & Data Engineering Community
Post +

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 471,339 software developers and data experts.

How to refer to the current module?

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
4 3872
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
Sweet! Thanks!

Mike

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

Similar topics

3 posts views Thread by Fernando Rodriguez | last post: by
reply views Thread by Christian Hudon | last post: by
4 posts views Thread by solar | last post: by
1 post views Thread by Alex | last post: by
reply views Thread by rosydwin | last post: by

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.