nie można było zrobić z argparse
, jednak można to zrobić po argparse
wyczerpał.
Oto przykład:
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)
używam tutaj opcje podane w skrypcie polecenia dla zapytań o MongoDB. Instancja collection
może albo wywołać metodę aggregate
, albo metodęz opcjonalnymi argumentami, dlatego widać, dlaczego dwa pierwsze argumenty są zgodne, a ostatni nie.
Więc teraz biegnę parser.parse_args()
i sprawdzić jego zawartość:
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)
Oczywiście, ten mały kilof pracuje tylko do prostych spraw i byłoby stać się koszmarem, aby sprawdzić wszystkie możliwe opcje, jeśli masz wiele wzajemnie ekskluzywne opcje i grupy. W takim przypadku należy podzielić opcje na grupy poleceń. W tym celu powinieneś postępować zgodnie z sugestią tutaj Python argparse mutual exclusive group.
Czy rozważałeś po prostu sprawdzenie po argparse za pomocą if? – erikbwork
Mogę, miło o argparse jest to, że obsługuje on komunikat o błędzie dla ciebie. –
Chociaż mogłem dodać normalną grupę opcji, używając 'add_argument_group' do wykluczającej się wzajemnie grupy, ale to nie działa w ogóle (to tak, jakby w ogóle nie mieć wzajemnie wykluczającej się grupy). Prawdopodobnie lepszym wyborem jest napisanie niestandardowej akcji, która implementuje tego rodzaju logikę. To powinno być zbyt trudne do zrobienia. – Bakuriu