Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Argparse"ArgumentError: argument -h/--help: conflicting option string(s): -h, --help"

Recently, I am learning argparse module, Argument error occurred below the code

import argparse import sys   class ExecuteShell(object):     def create(self, args):         """aaaaaaa"""         print('aaaaaaa')         return args      def list(self, args):         """ccccccc"""         print('ccccccc')         return args      def delete(self, args):         """ddddddd"""         print('ddddddd')         return args   class TestShell(object):     def get_base_parser(self):         parser = argparse.ArgumentParser()         parser.add_argument('-h',                             '--help',                             action='store_true',                             help=argparse.SUPPRESS)          parser.add_argument('-c', action='store',                             dest='create_value',                             help='create a file')          parser.add_argument('-d', action='store',                             dest='delete_value',                             help='delete a file')          parser.add_argument('-l', action='store',                             dest='list_value',                             help='list a dir')          return parser      def _find_actions(self, subparsers, actions_module):         for attr in (action for action in dir(actions_module) if not  action.startswith('__')):             callback = getattr(actions_module, attr)             desc = callback.__doc__ or ''             subparser = subparsers.add_parser(attr, description=desc)             subparser.add_argument('-h', '--help', action='help',                                    help=argparse.SUPPRESS)             self.subcommands[attr] = subparser             subparser.set_defaults(func=callback)      def main(self, args):         parser = self.get_base_parser()         (options, args) = parser.parse_known_args(args)         subparsers = parser.add_subparsers(metavar='<subcommand>')         a = ExecuteShell()         self.subcommands = {}         subcommand_parser = self._find_actions(subparsers, a)   if __name__ == "__main__":     a = TestShell()     a.main(sys.argv[1:]) 

Why do I get this error and how can I fix it?

like image 356
changzhi Avatar asked Sep 17 '13 01:09

changzhi


People also ask

How do you write help in Argparse?

As before, argparse automatically creates a --help option and documents your command-line interface (including the --upper-case option you just added). Try invoking aquarium.py with the --help option again to receive the updated help text: python3 aquarium.py --help.

What does argument parser do?

The argparse module makes it easy to write user-friendly command-line interfaces. It parses the defined arguments from the sys. argv . The argparse module also automatically generates help and usage messages, and issues errors when users give the program invalid arguments.

What does Argparse ArgumentParser ()?

The argparse module provides a convenient interface to handle command-line arguments. It displays the generic usage of the program, help, and errors. The parse_args() function of the ArgumentParser class parses arguments and adds value as an attribute dest of the object.


2 Answers

argparse adds --help and -h options by default. If you don't want to use the built-in help feature, you need to disable it with:

parser = argparse.ArgumentParser(add_help=False) 

See the documentation

like image 77
Barmar Avatar answered Oct 13 '22 01:10

Barmar


The same error pop-ups in 2 other scenarios:

1) Repeated code

parser.add_argument('-h',                         '--help',                         action='store_true',                         help=argparse.SUPPRESS)  parser.add_argument('-h',                         '--help',                         action='store_true',                         help=argparse.SUPPRESS) 

2) When you execute the code multiple times on the same kernel

I'm leaving it just in case if someone had simillar problem.

like image 44
Jakub Bielan Avatar answered Oct 13 '22 00:10

Jakub Bielan