Retry:Question about optparse/OptionParser callback.

James Stroud jstroud at mbi.ucla.edu
Fri Feb 9 19:37:48 EST 2007


Steven W. Orr wrote:
> I decided I could be more articulate. I hope this helps.
> 
> I'm writing a program that needs to process options. Due to the nature 
> of the program with its large number of commandline options, I would 
> like to write a callback to be set inside add_option.
> 
> Something like this:
> 
> parser.add_option("-b", action="callback", callback=optionhandlr, dest='b')
> 
> The Cookbook almost takes me there with a callback function that only 
> works for an option called b that takes no argument:
> 
> def optionhndlr(option, opt_str, value, parser):
>      if parser.values.b:
>          raise OptionValueError("can't use %s after -b" % opt_str)
>      setattr(parser.values, option.dest, 1)
> 
> but warns that "it needs a bit of work: the error message and the flag 
> that it sets must be generalized". I do need to do my option processing 
> in an option processor with many options and I'd both like to do it in 
> one method (if possible) and learn a trick or two while I'm at it. Is it 
> possible to have a single callback that could be used in the general case?
> 
> All I need is to be taught how to fish...
> 
> TIA
> 
> -- 
> Time flies like the wind. Fruit flies like a banana. Stranger things 
> have  .0.
> happened but none stranger than this. Does your driver's license say 
> Organ ..0
> Donor?Black holes are where God divided by zero. Listen to me! We are 
> all- 000
> individuals! What if this weren't a hypothetical question?
> steveo at syslang.net

If I understand your question, you are already half way there:

def optionhndlr(option, opt_str, value, parser):
   if getattr(parser.values, option.dest):
      msg = "can't use %s afer -%s" % (opt_str, option.dest)
      raise OptionValueError, msg
   setattr(parser.values, option.dest, 1)

James



More information about the Python-list mailing list