I think matching on the shortest unique prefix is common for command line parsers in general, not just argparse. I believe optparse did this too, and even the venerable getopt does! I think all this originated in the original (non-Python) GNU standard for long option parsing. All that probably explains why the docs hardly touch upon it.
As to why parse_known_args also does this, I can see the reasoning behind this behavior: to the end user, "--sync" is a valid option, so it would be surprising if it didn't get recognized under certain conditions. I suppose you were badly bitten by this recently? Can you tell us more about what happened? On Tue, Nov 26, 2013 at 9:30 AM, Eli Bendersky <eli...@gmail.com> wrote: > Hello, > > argparse does prefix matching as long as there are no conflicts. For > example: > > argparser = argparse.ArgumentParser() > argparser.add_argument('--sync-foo', action='store_true') > args = argparser.parse_args() > > If I pass "--sync" to this script, it recognizes it as "--sync-foo". This > behavior is quite surprising although I can see the motivation for it. At > the very least it should be much more explicitly documented (AFAICS it's > barely mentioned in the docs). > > If there's another argument registered, say "--sync-bar" the above will > fail due to a conflict. > > Now comes the nasty part. When using "parse_known_args" instead of > "parse_args", the above happens too - --sync is recognized for --sync-foo > and captured by the parser. But this is wrong! The whole idea of > parse_known_args is to parse the known args, leaving unknowns alone. This > prefix matching harms more than it helps here because maybe the program > we're actually acting as a front-end for (and hence using parse_known_args) > knows about --sync and wants to get it. > > Unless I'm missing something, this is a bug. But I'm also not sure whether > we can do anything about it at this point, as existing code *may* be > relying on it. The right thing to do would be to disable this prefix > matching when parse_known_args is called. > > Again, at the very least this should be documented (for parse_known_args > not less than a warning box, IMHO). > > Eli > > _______________________________________________ > Python-Dev mailing list > Python-Dev@python.org > https://mail.python.org/mailman/listinfo/python-dev > Unsubscribe: > https://mail.python.org/mailman/options/python-dev/guido%40python.org > > -- --Guido van Rossum (python.org/~guido)
_______________________________________________ Python-Dev mailing list Python-Dev@python.org https://mail.python.org/mailman/listinfo/python-dev Unsubscribe: https://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com