Currently I'm creating a directory reader program using Python. I'm using 'argparse' to parse the arguments from command line. I have the following code:
parser = argparse.ArgumentParser(prog = "LS.py", usage = "%(prog)s [options] [path1 [path2 [...pathN]]]\nThe paths are optional; if not given . is used.") group = parser.add_argument_group("Options") group.add_argument("-path", default = ".", help = argparse.SUPPRESS, metavar = "") group.add_argument("-m", "--modified", default = False, help = "show last modified date/time [default: off]", metavar = "") group.add_argument("-o ORDER", "--order=ORDER", nargs = 2, default = "name", help = "order by ('name', 'n', 'modified', 'm', 'size', 's')\n[default: name]", metavar = "") group.add_argument("-r", "--recursive", default = False, help = "recurse into subdirectories [default: off]", metavar = "") group.add_argument("-s", "--sizes", default = False, help = "show sizes [default: off]", metavar = "") args = parser.parse_args() return args
When called in the following manner "LS.py -h" it produces the following output:
usage: LS.py [options] [path1 [path2 [...pathN]]] The paths are optional; if not given . is used. optional arguments: -h, --help show this help message and exit Options: -m , --modified show last modified date/time [default: off] -o ORDER , --order=ORDER order by ('name', 'n', 'modified', 'm', 'size', 's') [default: name] -r , --recursive recurse into subdirectories [default: off] -s , --sizes show sizes [default: off]
My question: Is there a way to move the default help argument into a group such as Options? Also, I can't seem to find a way to remove the space before the commas in the Options arguments. The ideal output is:
Usage: ls.py [options] [path1 [path2 [...pathN]]] The paths are optional; if not given . is used. Options: -h, --help show this help message and exit -m, --modified show last modified date/time [default: off] -o ORDER, --order=ORDER order by ('name', 'n', 'modified', 'm', 'size', 's') [default: name] -r, --recursive recurse into subdirectories [default: off] -s, --sizes show sizes [default: off]
ArgumentParser() initializes the parser so that you can start to add custom arguments. To add your arguments, use parser. add_argument() . Some important parameters to note for this method are name , type , and required .
Number of Arguments If you want your parameters to accept a list of items you can specify nargs=n for how many arguments to accept. Note, if you set nargs=1 , it will return as a list not a single value.
You can use add_help=False
to disable the built-in help command and add your own instead, using action="help"
(thanks @mgilson!)
To get rid of the spaces, don't set metavar
to an empty string. Your options should be specified using action="store_true"
to make them true (argument-less) options:
import argparse parser = argparse.ArgumentParser(prog="LS.py", usage="%(prog)s [options] [paths...]\nThe paths are optional; if not given . is used.", add_help=False) group = parser.add_argument_group("Options") group.add_argument("-h", "--help", action="help", help="show this help message and exit") group.add_argument("-path", default=".", help=argparse.SUPPRESS) group.add_argument("-m", "--modified", action="store_true", help="show last modified date/time") group.add_argument("-o", "--order", nargs=1, default="name", help="sort order (n[ame], m[odified], s[ize])\n[default: name]") group.add_argument("-r", "--recursive", action="store_true", help="recurse into subdirectories") group.add_argument("-s", "--sizes", action="store_true", help="show sizes") args = parser.parse_args()
Output:
Options: -h, --help show this help message and exit -m, --modified show last modified date/time -o ORDER, --order ORDER sort order (n[ame], m[odified], s[ize]) [default: name] -r, --recursive recurse into subdirectories -s, --sizes show sizes
Sure you can do that. The trick is to just add add_help=False
the the ArgumentParser
constructor and then add your own help action to the group:
import argparse parser = argparse.ArgumentParser(prog = "LS.py", usage = "%(prog)s [options] [path1 [path2 [...pathN]]]\nThe paths are optional; if not given . is used.", add_help=False) group = parser.add_argument_group("Options") group.add_argument("-path", default = ".", help = argparse.SUPPRESS, metavar = "") group.add_argument("-m", "--modified", default = False, help = "show last modified date/time [default: off]", metavar = "") group.add_argument("-o ORDER", "--order=ORDER", nargs = 2, default = "name", help = "order by ('name', 'n', 'modified', 'm', 'size', 's')\n[default: name]", metavar = "") group.add_argument("-h", "--help", action='help', help='print this fabulous help message') group.add_argument("-r", "--recursive", default = False, help = "recurse into subdirectories [default: off]", metavar = "") group.add_argument("-s", "--sizes", default = False, help = "show sizes [default: off]", metavar = "") args = parser.parse_args()
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