[Python-Dev] getopt helper?
Barry A. Warsaw
bwarsaw@cnri.reston.va.us (Barry A. Warsaw)
Thu, 30 Sep 1999 16:29:55 -0400 (EDT)
I can sympathize with Mark, I have nearly the same code in every
script I write. I once wrote a nice (IMO) class for doing all the
common things I do with c.l. args, but I can't seem to dig it up at
the moment.
The idea was basically to have a base class that had all the
machinery, while derived classes included specially named methods that
did the app-specific option handling. It knew whether the method took
1 or zero arguments (not including self), glommed up the shortarg
string and longarg list (with appropriate `:' and `=' thrown in), then
parsed the args, dispatching to the handlers, e.g.:
class MyOptions(getopt.Options):
def handle_a(self):
self.alpha = 1
handle_alpha = handle_a
def handle_b(self, arg):
self.beta = arg
handle_beta = handle_b
def handle_i(self, arg):
try:
self.integer = int(arg)
except ValueError:
self.usage()
handle_integer = handle_i
and could be used like so:
#! /usr/bin/env python
#
# ...
opts = MyOptions(sys.argv[1:], usage=__doc__ % globals())
if opts.alpha:
do_my_alpha_thang()
if opts.integer = 1:
do_something_else()
for file in opts.leftoverargs:
process_file(file)
While I liked this a lot, I seem to remember showing it to Guido,
receiving the expected scoffing. So now, I just cut and paste the opt
parsing stuff into every script I write :) I think it might be nice to
add such a base class to the standard getopt module.
-Barry