if a good API is meant to let you write code more concisely, I would
say the argparse
achieves this goal perfectly. For example, with getopt
you
usually write something like :
try :
opts, cmdline = getopt.getopt(sys.argv[1:], "ho:v", ["help", "output="])
except getopt.GetoptError, err:
print str(err)
usage()
sys.exit(1)
output = None
verbose = False
for o, a in opts:
if o == "-v":
verbose = True
elif o in ("-h", "--help"):
usage()
sys.exit()
elif o in ("-o", "--output"):
output = a
else:
assert False, "unhandled option"
if not cmdline :
usage()
sys.exit(1)
This is just to add two command line options, help and verbose and without taking care of positional arguments… Now, the magic of argparse:
parser = argparse.ArgumentParser(description='description of you program')
parser.add_argument('-v', '--verbose')
parser.add_argument('timestamp', type=int, nargs=1, help="a unix timestamp")
parser.add_argument('inputfile', type=str, nargs=1, help="input file")
args = parser.parse_args()
parser.print_help()
tadaaaaa .
usage: import.py [-h] [-v VERBOSE] timestamp inputfile
description of you program
positional arguments:
timestamp a unix timestamp
inputfile input file
optional arguments:
-h, --help show this help message and exit
-v VERBOSE, --verbose VERBOSE
And this has all the bells and whistle you want. Like checking if you pass both positional arguments, if the file exists, if the timestamp is really and integer file, etc. Very nice indeed !