python sample.py -t abc -r dfg -h klm -n -p qui
И я хочу, чтобы разобрать argparse от -t до -h и оставить остальные, также показывают помощь для них только. Затем я хочу разобрать любой переключатель после -h в другую функцию и увидеть соответствующую помощь там.
Есть некоторые проблемы с вашей спецификации:
-h
Является ли регулярная помощь? Если это так, он имеет приоритет, создавая help
без разбора других аргументов. Строка после -h
предполагает, что вы рассматриваете ее как обычный пользовательский аргумент, который затем потребует инициирования анализатора с выключенной помощью. Но тогда как бы вы попросили help
?
Что устанавливает разрыв между двумя разборами/помощью? Количество аргументов, флаг -h
(независимо от порядка) или идентификатор флагов. Помните, что argparse
принимает помеченные аргументы в любом порядке.
Вы можете определить один синтаксический анализатор, который знает о -t
и -r
, а другой, который обрабатывает -n
и -p
. Вызов каждого из parse_known_args
позволяет работать без повышения ошибки unknown argument
.
Вы также можете изменить sys.argv
. parse_args
(и известный вариант) принимает необязательный аргумент argv
. Если это не так, то он использует sys.argv[1:]
. Таким образом, вы можете либо самому изменить sys.argv
(удаление элементов), либо вы можете передать подмножество sys.argv
в парсер.
parser1.parse_known_args(sys.argv[1:5])
parser2.parse_known_args(['-n','one','-o','two'])
parser3.parse_args(sys.argv[3:])
Играйте с этими идеями и возвращайтесь к нам, если есть дополнительные вопросы.
Вы можете дать 'parse_args' любой список строк' argv'. Например, 'parse_args (sys.argv [1: 5])' – hpaulj