2016-04-30 3 views
3

Gibt es eine Möglichkeit, Python's ArgumentParser anzugeben, dass zwei optionale Flags in Konflikt stehen?Wie zwei in Konflikt stehende Optionen verboten werden

arg_parser.add_argument('-c', '--clean', action='store_true') 
arg_parser.add_argument('-d', '--dirty', action='store_true') 

Ich möchte der Benutzer in der Lage sein, entweder keine oder nur eine anzugeben.

Ist es ohne weitere Bedingungen erreichbar?

Antwort

9

Wie über das Hinzufügen eines mutually exclusive group:

group = arg_parser.add_mutually_exclusive_group() 
group.add_argument('-c', '--clean', action='store_true') 
group.add_argument('-d', '--dirty', action='store_true') 

damit ich das folgende Verhalten erhalten:

>>> arg_parser.parse_args(['--clean']) 
Namespace(clean=True, dirty=False) 
>>> arg_parser.parse_args(['--dirty']) 
Namespace(clean=False, dirty=True) 
>>> arg_parser.parse_args(['--dirty','--clean']) 
usage: PROG [-h] [-c | -d] PROG: error: argument -c/--clean: not allowed with argument -d/--dirty 
+0

habe ich versucht, das gleiche, aber für Argumente, die definiert sind, um einen Wert zu erhalten, aber es didn arbeite nicht: group.add_argument ("- v", "--verbose", typ = str, nargs = '?') group.add_argument ("- q", "--quiet", type = str, nargs = '?') Irgendeine Idee warum? – omer

Verwandte Themen