Search code examples
pythonargparse

Display help message with Python argparse when script is called without any arguments


Assume I have a program that uses argparse to process command line arguments/options. The following will print the 'help' message:

./myprogram -h

or:

./myprogram --help

But, if I run the script without any arguments whatsoever, it doesn't do anything. What I want it to do is to display the usage message when it is called with no arguments. How is that done?


Solution

  • This answer comes from Steven Bethard on Google groups. I'm reposting it here to make it easier for people without a Google account to access.

    You can override the default behavior of the error method:

    import argparse
    import sys
    
    class MyParser(argparse.ArgumentParser):
        def error(self, message):
            sys.stderr.write('error: %s\n' % message)
            self.print_help()
            sys.exit(2)
    
    parser = MyParser()
    parser.add_argument('foo', nargs='+')
    args = parser.parse_args()
    

    Note that the above solution will print the help message whenever the error method is triggered. For example, test.py --blah will print the help message too if --blah isn't a valid option.

    If you want to print the help message only if no arguments are supplied on the command line, then perhaps this is still the easiest way:

    import argparse
    import sys
    
    parser=argparse.ArgumentParser()
    parser.add_argument('foo', nargs='+')
    if len(sys.argv)==1:
        parser.print_help(sys.stderr)
        sys.exit(1)
    args=parser.parse_args()
    

    Note that parser.print_help() prints to stdout by default. As init_js suggests, use parser.print_help(sys.stderr) to print to stderr.