[Python-3000] Move argv[0]? (Re: Unicode and OS strings) (original) (raw)

Ron Adam rrr at ronadam.com
Tue Sep 18 22:52:50 CEST 2007


Steven Bethard wrote:

On 9/17/07, Ron Adam <rrr at ronadam.com> wrote:

Greg Ewing wrote:

Thomas Wouters wrote:

If you want to put more meaning in the argv list, use an option parser. I want to put less meaning in it, not more. :-) And using an argument parser is often overkill for simple programs. Would it be possible to split out the (pre) parsing from optparse so that instead of returning a list, it returns a dictionary of attributes and values? This would only contain what was given in the command line as a first "lighter weight" step to parsing the command line. opts = optparser(argv) commandname = opts['argv0'] # better name for argv0? You might look at argparse which allows you to treat positional arguments just like optional ones. So you'd write:: parser = argparse.ArgumentParser() parser.addargument('command') # positional argument parser.addargument('--option') # optional argument args = parser.parseargs() ... args.command ... ... args.option ... If you're really insistent on a dict interface instead of an attribute interface, the object returned by parseargs() is just a simple namespace, so vars(args) will give you a dict. .. argparse: http://argparse.python-hosting.com/

I think a dict interface or even a (list, dict) interface is better in this case. It makes it much easier to use these in already existing functions and other objects.

Once an objects data is stored in named attributes, it becomes a more specialized data structure and requires more specialized functions and objects to make use of it. In the above case the attribute names are not even consistent because they depend on the .add_argument() calls. I think this makes it harder to write reusable code.

If the parser returned a list and dictionary pair, it might make it easy to use the (*args, **kwds) form to pass these values directly to functions or other objects.

That also gives an easy and light weight way to validate command line arguments in the simplest cases without a lot of work. Just let the function receiving them validate its arguments at call time.

Regards, Ron



More information about the Python-3000 mailing list