Переместить "help" в другую группу аргументов в python argparse
В настоящее время я создаю программу чтения каталогов, используя Python.
Я использую 'argparse' для анализа аргументов из командной строки. У меня есть следующий код:
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
При вызове следующим образом "LS.py -h" он выдает следующий вывод:
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]
Мой вопрос: есть ли способ переместить аргумент справки по умолчанию в группу, такую как "Параметры"?
Кроме того, я не могу найти способ удалить пробел перед запятыми в аргументах "Параметры". Идеальный выход:
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]
Ответы
Ответ 1
Вы можете использовать add_help=False
, чтобы отключить встроенную команду справки и добавить свой собственный вместо этого, используя action="help"
(thanks @mgilson!)
Чтобы избавиться от пробелов, не устанавливайте metavar
в пустую строку. Ваши параметры должны быть указаны с помощью action="store_true"
, чтобы сделать их true (без аргументов):
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()
Вывод:
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
Ответ 2
Конечно, вы можете это сделать. Хитрость заключается в том, чтобы просто добавить add_help=False
конструктор ArgumentParser
, а затем добавить в свою команду свою помощь:
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()
Ответ 3
Чтобы сконденсировать и немного упростить предыдущий ответ nneonneo, вы можете:
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()
В основном, небольшое отклонение от предыдущего ответа заключается в том, что не нужно сохранять group
, а затем повторно называть метод add_argument
на нем.