467,861 Members | 1,607 Online
Bytes | Developer Community
New Post

Home Posts Topics Members FAQ

Post your question to a community of 467,861 developers. It's quick & easy.

optparse and counting arguments (not options)

I feel like I must be reinventing the wheel here, so I figured I'd post
to see what other people have been doing for this. In general, I love
the optparse interface, but it doesn't do any checks on the arguments.
I've coded something along the following lines a number of times:

class OptionArgParser(optparse.OptionParser):
def __init__(self, *args, **kwargs):
self.min_args = kwargs.pop('min_args', None)
self.max_args = kwargs.pop('max_args', None)
self.arg_values = kwargs.pop('arg_values', None)
optparse.OptionParser.__init__(self, *args, **kwargs)

def parse_args(self, args=None):
options, args = optparse.OptionParser.parse_args(self, args)
if self.min_args is not None and len(args) < self.min_args:
self.error('too few arguments')
if self.max_args is not None and len(args) > self.max_args:
self.error('too many arguments')
if self.arg_values is not None:
for arg, values in zip(args, self.arg_values):
if values is not None and arg not in values:
message = 'argument %r is not one of: %s'
self.error(message % (arg, ', '.join(values)))
return options, args

This basically lets me skip some simple checks by creating instances of
OptionArgParser instead of optparse.OptionParser, and supplying my new

parser = OptionArgParser(
min_args=1, arg_values=[commands],
usage='%%prog [options] (%s) ...' % '|'.join(commands),
description='invoke one of the commands')

Is this problem already solved in some module that I've missed?

May 10 '06 #1
  • viewed: 953

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

8 posts views Thread by Hans-Joachim Widmaier | last post: by
7 posts views Thread by Henry Ludemann | last post: by
3 posts views Thread by Bob | last post: by
4 posts views Thread by rick | last post: by
3 posts views Thread by Rocky Zhou | last post: by
4 posts views Thread by Mathias Waack | last post: by
7 posts views Thread by wannymahoots | last post: by
1 post views Thread by John O'Hagan | last post: by
reply views Thread by jack112 | last post: by
By using this site, you agree to our Privacy Policy and Terms of Use.