braver wrote: > Steve -- thanks for your pointer to argparse, awesome progress -- > optional arguments. > > However, I still wonder how I do reporting. The idea is that there > should be a list with tuples of the form: > > (short, long, value, help) > > -- for all options, regardless of whether they were specified on the > command line or not. > > Moreover, a way to create such list should be incremental -- in ruby I > define things around each option definition and add a new tuple to the > reporting list right after the block defining the option. > > The idea is, -- help should report on all options with their actual or > default values, and everything pertaining to one option -- its > definition, callbacks, and adding it to the reporting list -- must be > in vicinity of each other, so I don't forget to output some stuff > about an option ten options below... The snippet I've shown pretty > much does it in Ruby.
I guess I still don't understand how that's different from what add_argument (or add_option) and print_help currently do:: >>> parser = argparse.ArgumentParser() >>> parser.add_argument('-P', nargs='?', const='data', help='PP') >>> parser.add_argument('--foo', help='FOO') >>> parser.print_help() usage: [-h] [-P [P]] [--foo FOO] optional arguments: -h, --help show this help message and exit -P [P] PP --foo FOO FOO Everything pertaining to one option is grouped together in a single add_argument call (add_option if you're using optparse). And you don't forget what to output because the print_help() method already takes care of it all. Or are you asking for more information (e.g. default values) to be included in the help output? I've been hesitant to do that automatically because often the default values do not have a useful printable form (e.g. when the default is a function or class object). > Ah, yeah, and another thing -- I want to define a module with about 10 > options common for a project. Then I'd import it in scripts, and > there should be three things doable with the preexisting default > options: > > -- turn off any of them > -- supply new defaults to any of them > -- add new options in the same way > > Wonder how brave pythonistas do that! With argparse, it would look something like:: import mod parser = argparse.ArgumentParser(parents=[mod.parser]) # supply new default parser.set_defaults(foo='bar') # add new option parser.add_argument('--bar', ...) The parents= keyword argument is documented here: http://argparse.python-hosting.com/wiki/ArgumentParser/parents Currently, there isn't a way to turn off an argument. I'd instead suggest that you create a new parser that doesn't have the extra options, and have the parser with more options include that one using parents=. STeVe -- http://mail.python.org/mailman/listinfo/python-list