[Python-Dev] Python 2.7b1 and argparse's version action

Tobias Herp Tobias.Herp at gmx.de
Wed Apr 21 01:46:14 CEST 2010


"Martin v. Löwis" schrieb:
>> - many optparse programs use the version argument
>> - many other programmers find this feature very convenient
>> - dropping or deprecating this is a totally unnecessary change
>>   (I have not read a single real reason /why/ this should be done).
> 
> You actually brought up a good reason yourself:
> 
> In the face of ambiguity, refuse the temptation to guess.

I didn't guess.  The vast majority of *x commandline tools, *including
the Python interpreter*, uses '--version' and/or '-V' for the version
action, while '-v' is often used for something else, most often
verbosity (again: e.g. the Python interpreter).  Nobody has argued the
converse.  The optparse module uses just '--version' option string by
default, following the standard.

> If you ask "give me a version argument", the question is "how is it
> spelled?". IIUC, you originally complained that the spelling of argparse
> (i.e. -v/--version) is not good, and that a different spelling should be
> used. So it's ambiguous, in which case the feature shouldn't be provided
> in the first place.

Wrong!

Just follow the de-facto standard.  There has never been a problem with
optparse's version argument, simply because of the fact it conforms with
the standard (using just '--version').  Perhaps we wouldn't argue now if
they had decided to add '-V' as well, which is AFAIK /never/ used for
anything else than the version, either;  perhaps this would have been
adopted by argparse as well.  The optik/optparse people didn't, and the
argparse people apparently didn't really look out what options look like
in the wild.

There is *no* problem with a 'version' argument (which has always been
*optional*; nobody is forced to use it) which simply defines the
'--version' option to trigger the version option.  There has *never*
been a problem with the optparse way to do it!

Now argparse wants to become a part of Python's standard library; it
certainly has advantages over optparse.  But the user won't be
interested in the difference:  "Oh, I see, this is an argparse-based
program, so the '-v' is naturally not available for verbosity. Fine!"

Up to today, the argparse module had a limited audience.  When becoming
part of Python, it must follow standards; it should Do The Right Thing
by default, and it should keep the usage difference to optparse as small
as possible.

People should be allowed to rely on the fact that /Python scripts follow
the standards/; this is a huge usability gain.

Thus, argparse should *continue* to support the version argument,
because it is convenient (we use Python because it is convenient!), and
it is sufficient in 95% of the cases (I have written lots of optparse
scripts, and in exactly one case I wrote the version output myself).

It should discontinue the '-v' short option string, because it is
non-standard, and it is ambiguous; it is often used for something else,
while '-V' isn't (but adding this as a default would like break existing
argparse programs, so this is not an option).

If the community feels this is necessary, the '-v' could be supported
'invisibly': it should not be visible in the help, and it must not block
the usage of '-v' for other purposes.

-- 
Tobias


More information about the Python-Dev mailing list