Python argparse required=True but --version functionality?

18,603

There is a special version action keyword argument to add_argument (As documented here: argparse#action).
Try this (copied from working code):

parser.add_argument('-V', '--version', 
                    action='version',                    
                    version='%(prog)s (version 0.1)')
Share:
18,603

Related videos on Youtube

Bob Tanner
Author by

Bob Tanner

Updated on September 22, 2022

Comments

  • Bob Tanner
    Bob Tanner over 1 year

    In all my scripts I use the standard flags --help and --version, however I cannot seem to figure out how to make a --version with parser.add_argument(..., required=True).

    import sys, os, argparse
    
    parser = argparse.ArgumentParser(description='How to get --version to work?')
    
    parser.add_argument('--version', action='store_true', 
                        help='print version information')
    parser.add_argument('-H', '--hostname', dest='hostname', required=True, 
                        help='Host name, IP Address')
    parser.add_argument('-d', '--database', dest='database', required=True,
                        help='Check database with indicated name')
    parser.add_argument('-u', '--username', dest='username', required=True, 
                        help='connect using the indicated username')
    parser.add_argument('-p', '--password', dest='password', required=True, 
                        help='use the password to authenticate the connection')
    
    args = parser.parse_args()
    
    if args.version == True:
        print 'Version information here'
    
    $ ./arg.py  --version 
    usage: arg.py [-h] [--version] -H HOSTNAME -d DATABASE -u USERNAME -p PASSWORD 
    arg.py: error: argument -H/--hostname is required
    

    Yes, I want --hostname and others required, but I always want --version to work appropriately like --help (and -h).

    $ ./arg.py  --help   
    usage: arg.py [-h] [--version] -H HOSTNAME -d DATABASE -u USERNAME -p PASSWORD
    
    How to get --version to work?
    
    optional arguments:
      -h, --help            show this help message and exit
      --version             print version information
      -H HOSTNAME, --hostname HOSTNAME
                            Host name, IP Address
      -d DATABASE, --database DATABASE
                            Check database with indicated name
      -u USERNAME, --username USERNAME
                            connect using the indicated username
      -p PASSWORD, --password PASSWORD
                            use the password to authenticate the connection
    

    Any help on getting --version to work?

    • radtek
      radtek about 10 years
      Should be (to avoid key errors:) if 'version' in args: print 'Version information here'
  • Martijn Pieters
    Martijn Pieters over 11 years
    As documented in docs.python.org/library/argparse.html#action, +1. Note that this is exactly what the OP asks for; a method to make a --version argument work, when there are required=True arguments.