penso che è abbastanza difficile da raggiungere che (tra cui un bel messaggio di aiuto), mentre solo utilizzando le funzioni argparse standard. Puoi comunque testarlo da solo dopo aver analizzato gli argomenti. Puoi descrivere i requisiti aggiuntivi nell'epilogo o giù di lì. Si noti che è inusuale usare i numeri come opzioni, ho dovuto usare dest = 'two', poiché args.2 non è una sintassi valida.
#!/usr/bin/env python
import argparse
parser = argparse.ArgumentParser(
description='bla bla',
epilog='Note: arguments -3 and -4 are required when -2 is missing')
parser.add_argument('-2', dest='two', action='store_true')
parser.add_argument('-3', dest='three')
parser.add_argument('-4', dest='four')
parser.add_argument('-5', dest='five')
args = parser.parse_args()
if not args.two and (args.three is None or args.four is None):
parser.error('arguments -3 and -4 are required when -2 is missing')
print 'Good:', args
Con questi risultati:
[~]: ./test.py -h
usage: test.py [-h] [-2] [-3 THREE] [-4 FOUR] [-5 FIVE]
bla bla
optional arguments:
-h, --help show this help message and exit
-2
-3 THREE
-4 FOUR
-5 FIVE
Note: arguments -3 and -4 are required when -2 is missing
[~]: ./test.py -2
Good: Namespace(five=None, four=None, three=None, two=True)
[~]: ./test.py -3 a -4 b
Good: Namespace(five=None, four='b', three='a', two=False)
[~]: ./test.py -3 a
usage: test.py [-h] [-2] [-3 THREE] [-4 FOUR] [-5 FIVE]
test.py: error: arguments -3 and -4 are required when -2 is missing
[~]: ./test.py -2 -5 c
Good: Namespace(five='c', four=None, three=None, two=True)
[~]: ./test.py -2 -3 a
Good: Namespace(five=None, four=None, three='a', two=True)
fonte
2013-08-02 21:29:40
Fai un subparser calettato su -2 che replica gli altri comandi come optional. Al livello più alto, link -3 e -4 insieme. – Jiminion
L'uso dei comandi della sottospecifica che iniziano con '-' può essere complicato. '-2' potrebbe funzionare, ma' -t' o '--two' non lo farebbero perché sembrano opzionali. Ma se '-3' è definito come argomento, allora' -2' non funziona più come un comando subparser (o una scelta). – hpaulj