[Python-Dev] Proposed standard module: Optik
Greg Ward
gward@python.net
Mon, 11 Feb 2002 15:37:16 -0500
--TB36FDmn/VVEgNH/
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
On 11 February 2002, I said:
> A good starting point for modules that compete with Optik can be found
> in "User Interfaces" section of the Vaults of Parnassus:
>
> http://www.vex.net/parnassus/apyllo.py/808292924
OK, I've looked at all the option-parsing packages listed in Parnassus.
I've read the docs for all of them, and flipped through the source for
some of them. Here's the executive summary:
* only one of them, arglist.py by Ben Wolfson, has a nice OO
design similar to Optik
* the one feature that several of the competition offer but Optik
does not (yet) is the ability to specify an option that *may*
take a value, but doesn't necessarily *have to* take a value.
Ironically, this is one of my requirements for the Distutils,
motivated by the --home option to the "install" command.
I think arglist.py is the only serious contender here. Based on my
cursory inspection, all of the others have rather deep flaws. (Eg. they
implement a non-standard syntax, or they do all their work at import
time rather than providing a class to instantiate and do option-parsing
work, or they have painful/awkward/hairy programming interface.)
I'll attach my full notes. Anyone else who feels like doing this should
start at the *bottom* of the list on Parnassus, since I devoted
progressively less time and energy to each package along the way. ;-)
Greg
--
Greg Ward - geek gward@python.net
http://starship.python.net/~gward/
Save energy: be apathetic.
--TB36FDmn/VVEgNH/
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment; filename="competition.txt"
THE COMPETITION
---------------
arglist.py (Feb 2002)
author: Ben Wolfson <rumjuggler@cryptarchy.org>
url: http://home.uchicago.edu/~wolfson/Python/
* fairly clean OO design, much like Optik: Option for each option,
Argument for a collection of options
* results of parsing command line (option values and leftover
positional args) are accessible through Arguments object -- no
separate "option values" object
* handles short options much like Optik: "-ffoo" and "-f foo" seem to
work, as does "-avx" where -a, -v, -x all value-less options
* subtly different notion of "default value" from Optik -- if an
option takes a value, and no default value is provided, the user
must provide a value. With Optik (<= 1.2), if an option takes a
value the user must always provide a value; the default value is for
when that option isn't present at all.
* dependent on Python 2.2 -- even uses a metaclass! (not that
it really *needs* to)
* no strong typing, much weaker callback interface; but "behaviors"
are like Optik's "actions" -- there just aren't as many of them
* main advantage over Optik: it's possible to define an option
that takes a value, but doesn't require a value
* error-handling? not sure -- think it raises an exception
* long option abbreviations allowed? not sure
Cmdline (1.0)
author: Daniel Gindikin <dan@netrics.com>
url: http://members.home.com/gindikin/dev/python/cmdline/
* weird API: just import the module and it does everything
then
* slightly weird user interface: in addition to the standard
"--foo=bar" and "--foo bar", "foo=bar" and "foo:bar" also
work: yuck
* very cool error-handling: prints out the command-line, underlining
the option with errors -- nice!
* rudimentary type-checking -- if you ask for an integer value, and
user supplied a string, it bombs with a useful error message
* not extensible -- everything's done at module-level, no classes
or anything nice like that
* long option abbreviations allowed? not sure
Getargs (1.3)
author: ? (Ivan Van Laningham?)
url: http://www.pauahtun.org/ftp.html
* painful, clunky interface (eg. None specifies a boolean option,
0j a "count" option, 0 an integer option, 0.0 a float option)
* I don't see how to specify a plain old string option!
* documentation is confusing and poorly written
* "long options" are Tk-style, eg. "-file", rather than GNU-style
"--file"
* order of options is lost -- not clear what happens if user does
-ffoo -fbar? what is the value of -f?
* long options can be abbreviated
* last updated 1999
GetPot Python
author: Frank-Rene Schaefer
url: http://getpot.sourceforge.net/
* written in C++, so an extension is needed... or is it? not clear
* docs cover C++ version
* LGPL'd
* seems to define a mini-language for defining command-line options;
not sure where you're supposed to put those .pot source files
Options
author: Tim Colles <timc@dai.ed.ac.uk>
Johan Vromans <jvromans@squirrel.nl>
* port of Perl's Getopt::Long
* not really OO or extensible, as near as I could tell
* possible to specify option types and required-ness, but the
syntax is hairy -- I think it's all done in one fell swoop
(single call to GetOptions() does everything)
--TB36FDmn/VVEgNH/--