This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

classification
Title: Different behavior for argparse between 2.7.8 and 2.7.9 when adding the same arguments to the root and the sub commands
Type: behavior Stage: resolved
Components: Library (Lib) Versions: Python 2.7
process
Status: closed Resolution: not a bug
Dependencies: Superseder:
Assigned To: Nosy List: bethard, hhuang, paul.j3, r.david.murray, remram, smparkes
Priority: normal Keywords:

Created on 2015-05-20 22:35 by hhuang, last changed 2022-04-11 14:58 by admin. This issue is now closed.

Messages (3)
msg243700 - (view) Author: Hao Huang (hhuang) Date: 2015-05-20 22:35
When I was trying to add the same argument to both the root command and the sub command and you put the arguments before the subcommand, In 2.7.8 the arguments would be parsed correctly. But in 2.7.9, they wouldn't but these arguments would show up in the help doc:(

For python2.7.8
~$ python2.7
Python 2.7.8 (default, Oct 29 2014, 13:45:48)
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import argparse
>>>
>>> parser = argparse.ArgumentParser()
>>> parser.add_argument("-s", dest="start")
_StoreAction(option_strings=['-s'], dest='start', nargs=None, const=None, default=None, type=None, choices=None, help=None, metavar=None)
>>>
>>> subparsers = parser.add_subparsers()
>>> subparser = subparsers.add_parser("command")
>>> subparser.add_argument("-s", dest="start")
_StoreAction(option_strings=['-s'], dest='start', nargs=None, const=None, default=None, type=None, choices=None, help=None, metavar=None)
>>>
>>> parser.parse_args(["-s", "1", "command"])
Namespace(start='1')
>>> parser.parse_args(["command", "-s", "1"])
Namespace(start='1')

For python 2.7.9
~$ python2.7
Python 2.7.9 (default, Apr 2 2015, 15:33:21)
[GCC 4.9.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import argparse
>>> parser = argparse.ArgumentParser()
>>> parser.add_argument("-s", dest="start")
_StoreAction(option_strings=['-s'], dest='start', nargs=None, const=None, default=None, type=None, choices=None, help=None, metavar=None)
>>>
>>> subparsers = parser.add_subparsers()
>>> subparser = subparsers.add_parser("command")
>>> subparser.add_argument("-s", dest="start")
_StoreAction(option_strings=['-s'], dest='start', nargs=None, const=None, default=None, type=None, choices=None, help=None, metavar=None)
>>>
>>> parser.parse_args(["-s", "1", "command"])
Namespace(start=None)
>>> parser.parse_args(["command", "-s", "1"])
Namespace(start='1')
msg243701 - (view) Author: Hao Huang (hhuang) Date: 2015-05-20 22:35
I think this patch cause the difference:
https://hg.python.org/cpython/rev/1a3143752db2
msg244767 - (view) Author: paul j3 (paul.j3) * (Python triager) Date: 2015-06-03 16:27
And the corresponding bug issue

http://bugs.python.org/issue9351
History
Date User Action Args
2022-04-11 14:58:17adminsetgithub: 68439
2017-03-28 16:55:45paul.j3setstatus: open -> closed
resolution: not a bug
stage: resolved
2015-06-03 18:25:35remramsetnosy: + remram
2015-06-03 16:27:47paul.j3setnosy: + paul.j3
messages: + msg244767
2015-05-20 22:59:46ned.deilysetnosy: + bethard, r.david.murray, - larry
components: + Library (Lib), - Argument Clinic
2015-05-20 22:57:55smparkessetnosy: + smparkes
2015-05-20 22:35:49hhuangsetmessages: + msg243701
2015-05-20 22:35:14hhuangcreate