Я знаю, что argparse описывает в своей документации , что параметры, начинающиеся с -
или --
, считаются необязательными:
В общем, модуль argparse предполагает, что флаги типа -f
и --bar
указывают необязательные аргументы, которые всегда могут быть опущены в командной строке.
Независимо от того, определяете ли вы параметры как необходимые или нет, они будут отображаются в « необязательные аргументы » в выводе справки argparse:
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--required_argument', action='store_true', required=True)
parser.add_argument('--optional_argument', action='store_false', required=False)
parser.add_argument('positional_argument')
args = parser.parse_args()
Это приводит к следующему выводу справки:
usage: demo.py [-h] --required_argument [--optional_argument] positional_argument
positional arguments:
positional_argument
optional arguments:
-h, --help show this help message and exit
--required_argument
--optional_argument
Как вы могли заметить, нет независимо от того, определены ли аргументы, начинающиеся с -
или --
, как обязательные или нет, они перечислены в « необязательных аргументах ». Только те квадратные скобки в строке «использование» указывают, можно ли это опустить или нет.
Я уже знаю, что есть обходной путь для этого, используя add_argument_group () , например так:
import argparse
parser = argparse.ArgumentParser()
group1 = parser.add_argument_group(title='required arguments')
group1.add_argument('--required_argument', action='store_true', required=True)
parser.add_argument('--optional_argument', action='store_false', required=False)
parser.add_argument('positional_argument')
args = parser.parse_args()
usage: demo.py [-h] --required_argument [--optional_argument] positional_argument
positional arguments:
positional_argument
optional arguments:
-h, --help show this help message and exit
--optional_argument
required arguments:
--required_argument
Но как добиться аналогичной вещи, если у вас есть взаимоисключающие аргументы? Предположим, вам нужно предоставить один из двух аргументов, но не оба одновременно. Я знаю, что есть лучшие варианты, как в этом примере, но ради этого: Когда вам нужно, чтобы пользователь использовал либо --enable
, либо --disable
: нужно предоставить один, но оба не имеют смысла.
Если это реализовано следующим образом, я не знаю, как сделать так, чтобы он не попадал под " необязательные аргументы ", поскольку add_mutually_exclusive_group () не поддерживается аргументы "title" и "description" add_argument_group () :
Обратите внимание, что в настоящее время взаимоисключающие группы аргументов не поддерживают аргументы title и description add_argument_group ( ) .
import argparse
parser = argparse.ArgumentParser()
group1 = parser.add_mutually_exclusive_group(required=True)
group1.add_argument('--enable', action='store_true', help='Enable something')
group1.add_argument('--disable', action='store_false', help='Disable something')
args = parser.parse_args()
usage: demo.py [-h] (--enable | --disable)
optional arguments:
-h, --help show this help message and exit
--enable Enable something
--disable Disable something
Итак, кто-нибудь знает решение с помощью argparse или это запрос showtopper, и нужно переключиться на что-то еще, например нажмите