Czy add_mutually_exclusive_group()
z argparse
pomoc?
parser = argparse.ArgumentParser()
exclusive_grp = parser.add_mutually_exclusive_group()
exclusive_grp.add_argument('--foo', action='store_true', help='do foo')
exclusive_grp.add_argument('--no-foo', action='store_true', help='do not do foo')
args = parser.parse_args()
print 'Starting program', 'with' if args.foo else 'without', 'foo'
print 'Starting program', 'with' if args.no_foo else 'without', 'no_foo'
Oto jak to wygląda, gdy bieg:
./so.py --help
usage: so.py [-h] [--foo | --no-foo]
optional arguments:
-h, --help show this help message and exit
--foo do foo
--no-foo do not do foo
./so.py
Starting program without foo
Starting program without no_foo
./so.py --no-foo --foo
usage: so.py [-h] [--foo | --no-foo]
so.py: error: argument --foo: not allowed with argument --no-foo
Inaczej jest z następujących opcji w wzajemnie wyłącznej grupie pozwala ani opcja w programie (i jestem przy założeniu, że chcesz opcje ze względu na składnię --
). Oznacza to jedno albo drugie:
parser.add_argument('--foo=', choices=('y', 'n'), default='y',
help="Do foo? (default y)")
Jeśli są wymagane (non-opcja), może za pomocą add_subparsers()
jest to, czego szukasz.
Update 1
Logicznie różne, ale może czystsze:
...
exclusive_grp.add_argument('--foo', action='store_true', dest='foo', help='do foo')
exclusive_grp.add_argument('--no-foo', action='store_false', dest='foo', help='do not do foo')
args = parser.parse_args()
print 'Starting program', 'with' if args.foo else 'without', 'foo'
i uruchomienie go:
./so.py --foo
Starting program with foo
./so.py --no-foo
Starting program without foo
./so.py
Starting program without foo
nr „NIE” prefiks jest wysoce zlokalizowane. Nie jest spójny w języku angielskim ("un-" jest również dość powszechny.) –
Myślę, że musisz napisać to sam. Chciałbym, żeby to wszystko zostało wbudowane. – jterrace
@ S.Lott: To prawda. Ten program nie będzie jednak miał globalnej publiczności. :-) A gdyby taka możliwość była dostępna, spodziewałbym się, że prefiks będzie mógł być w jakiś sposób dostosowany. – Omnifarious