[Python-Dev] Proposed standard module: Optik

Greg Ward gward@python.net
2002年2月11日 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/--

AltStyle によって変換されたページ (->オリジナル) /