I have below python script which if I run with Python 2.7.16 version then I get an error but if I run with Python 3 version then it works fine.
Below is my code:
from argparse import ArgumentParser def parse_cli_arguments(): parser = ArgumentParser( description='some stuff' ) parser.add_argument( "-v", "--verbose", help="verbose output", action="store_true" ) subparser = parser.add_subparsers( title="action", dest='action', required=True, help='action sub-command help' ) # create the subparser for the "push" command parser_push = subparser.add_parser( 'push', help='push help' ) parser_push.add_argument( 'environment', type=str, help='push environment help' ) parser_push.add_argument( 'instance', type=str, help='push instance help' ) parser_push.add_argument( 'config', type=str, help='push config help' ) # create the subparser for the "status" command parser_status = subparser.add_parser( 'status', help='status help' ) parser_status.add_argument( 'environment', type=str, help='status environment help' ) parser_status.add_argument( 'instance', type=str, help='status instance help' ) return parser def main(): parser = parse_cli_arguments() args = parser.parse_args() if args.action == 'push': print('You chose push:', args.environment, args.instance, args.config) elif args.action == 'status': print('You chose status:', args.environment, args.instance) else: print('Something unexpected happened') if __name__ == '__main__': main() Problem Statement
Below is the error I am getting with Python 2.7.16 version. Any thoughts what wrong am I doing here?
I need to run my above code on Python 2.7.16 version.
❯ python test.py Traceback (most recent call last): File "test.py", line 70, in <module> main() File "test.py", line 59, in main parser = parse_cli_arguments() File "test.py", line 17, in parse_cli_arguments help='action sub-command help' File "/Users/andy/.pyenv/versions/2.7.16/lib/python2.7/argparse.py", line 1678, in add_subparsers action = parsers_class(option_strings=[], **kwargs) TypeError: __init__() got an unexpected keyword argument 'required' Do I need to change some syntax here to make it work with Python2?
subparsersused to berequiredby default, like a regularpositional. Therequiredoption in Py3 has a long history. stackoverflow.com/questions/22990977/…; stackoverflow.com/questions/23349349/…