Ответ 1
Вы не могли бы сделать это с помощью argparse
, однако вы можете сделать это после выполнения argparse
.
Вот пример:
parser = argparse.ArgumentParser()
# group 1
parser.add_argument("-q", "--query", help="query", required=False)
parser.add_argument("-f", "--fields", help="field names", required=False)
# group 2
parser.add_argument("-a", "--aggregation", help="aggregation",
required=False)
Я использую здесь опции, предоставленные оболочке командной строки для запроса mongodb. Экземпляр collection
может либо вызвать метод aggregate
, либо метод find
с дополнительными аргументами query
и fields
, поэтому вы видите, почему первые два аргумента совместимы, а последний - нет.
Итак, теперь я запускаю parser.parse_args()
и проверяю его содержимое:
args = parser().parse_args()
print args.aggregation
if args.aggregation and (args.query or args.fields):
print "-a and -q|-f are mutually exclusive ..."
sys.exit(2)
Конечно, этот маленький взлом работает только для простых случаев, и для кошмаров можно было бы проверить все возможные варианты, если у вас есть много взаимоисключающих опций и групп. В этом случае вы должны разбить свои параметры в командных группах. Для этого вам следует следовать предложению взаимной эксклюзивной группы Python argparse.