parser - Mueva la “ayuda” a un grupo de argumentos diferente en python argparse
arguments parser python (3)
Actualmente estoy creando un programa de lectura de directorios usando Python. Estoy usando ''argparse'' para analizar los argumentos desde la línea de comandos. Tengo el siguiente código:
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
Cuando se llama de la siguiente manera, "LS.py -h" produce el siguiente resultado:
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]
Mi pregunta: ¿Hay alguna forma de mover el argumento de ayuda predeterminado a un grupo como Opciones? Además, parece que no puedo encontrar una manera de eliminar el espacio antes de las comas en los argumentos de Opciones. El resultado ideal es:
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]
Claro que puedes hacer eso. El truco es simplemente agregar add_help=False
el constructor ArgumentParser
y luego agregar su propia acción de ayuda al grupo:
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()
Para condensar y simplificar un poco la respuesta anterior de nneonneo , puede tener:
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)
add_arg = parser.add_argument_group("Options").add_argument
add_arg("-h", "--help", action="help", help="show this help message and exit")
add_arg("-path", default=".", help=argparse.SUPPRESS)
add_arg("-m", "--modified", action="store_true",
help="show last modified date/time")
add_arg("-o", "--order", nargs=1, default="name",
help="sort order (n[ame], m[odified], s[ize])/n[default: name]")
add_arg("-r", "--recursive", action="store_true",
help="recurse into subdirectories")
add_arg("-s", "--sizes", action="store_true",
help="show sizes")
args = parser.parse_args()
Básicamente, la ligera variación de la respuesta anterior es que no es necesario guardar el group
y luego llamar repetidamente al método add_argument
.
Puedes usar add_help=False
para deshabilitar el comando de ayuda incorporado y agregar el tuyo en su lugar, usando action="help"
(¡gracias @mgilson!)
Para deshacerse de los espacios, no establezca metavar
en una cadena vacía. Sus opciones deben especificarse usando action="store_true"
para que sean verdaderas (sin argumentos) opciones:
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()
Salida:
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