[Python-Dev] PEP 389: argparse - new command line parsing module

Michael Foord fuzzyman at voidspace.org.uk
Mon Sep 28 17:26:52 CEST 2009


m h wrote:
> Perhaps this is OT, but since command line parsing is part of
> configuration, I figure I'd throw it out there.  My scripts often have
> configuration that the command line can override and I loosely follow
> the example hierarchy[0] listed in The Art of Unix Programming.
>
> Some configuration I want in a config file (but I want to override
> from the command line) and sometimes it's very nice to use environment
> variables for configuration.  So I do something like this:
>
>   

Integration with command line options is an occasionally-requested 
feature for ConfigObj. I've always said I would be open to patches...

In other words, yes I think there is demand for it. Whether it belongs 
*immediately* in the standard library is another matter, but if you 
wrote a layer that unified ConfigParser and argparse I think you will 
find that people use it.

It is well outside the realm of this PEP however.

All the best,

Michael Foord

> Chaining Configuration
> ----------------------
>
> Ugly code to cascade configuration
>
>   
>>>> class Unset(object): pass
>>>> def cascade_value(opt=None, opt_name=None, env_name=None, cfg=None, cfg_section=None, cfg_name=None, default=None):
>>>>         
> ...    """
> ...    opt - result of OptionParser.parse_args
> ...    opt_name - string of opt name you want to access
> ...    """
> ...    # get from cmd line
> ...    value = Unset()
> ...    if opt and opt_name:
> ...        try:
> ...            value = opt.__getattr__(opt_name)
> ...        except AttributeError, e:
> ...            pass
> ...    if not isinstance(value, Unset):
> ...        return value
> ...    # get from ENV
> ...    if env_name:
> ...        try:
> ...            value = os.environ[env_name]
> ...        except KeyError, e:
> ...            pass
> ...    if not isinstance(value, Unset):
> ...        return value
> ...    # get from config file
> ...    if cfg and cfg_section and cfg_name:
> ...        try:
> ...            value = cfg.get(cfg_section, cfg_name)
> ...        except ConfigParser.NoOptionError, e:
> ...            pass
> ...    if not isinstance(value, Unset):
> ...        return value
> ...    return default
>
>
>   
>>>> cascade_value(opt=opt, opt_name='author', cfg=cfg, cfg_section='Properties', cfg_name='author')
>>>>         
> 'Matt'
>
> Does anyone else have interest in such functionality?  Is it outside
> the realm of this PEP?  Ideally I'd like to have something like
> ``env_name``, ``config_key`` named parameters for options, then pass
> an optional list of configs files to the parser instance.  Then rather
> than looking solely at command line options, argparse could also pull
> values from config files, then env and finally the command line.
>
> cheers,
>
> matt harrison
>
>
> 0 - http://www.faqs.org/docs/artu/ch10s02.html
> _______________________________________________
> Python-Dev mailing list
> Python-Dev at python.org
> http://mail.python.org/mailman/listinfo/python-dev
> Unsubscribe: http://mail.python.org/mailman/options/python-dev/fuzzyman%40voidspace.org.uk
>   


-- 
http://www.ironpythoninaction.com/
http://www.voidspace.org.uk/blog




More information about the Python-Dev mailing list