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?
The argparse module provides a convenient interface to handle command-line arguments. It displays the generic usage of the program, help, and errors. required is a parameter of the ArugmentParser object's function add_argument() . By default, the arguments of type -f or --foo are optional and can be omitted.
To add an optional argument, simply omit the required parameter in add_argument() . args = parser. parse_args()if args.
The boolean value is always assigned, so that it can be used in logical statements without checking beforehand: import argparse parser = argparse. ArgumentParser(description="Parse bool") parser. add_argument("--do-something", default=False, action="store_true", help="Flag to do something") args = parser.
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)')
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With