2017-09-12 1 views
1

J'essaie de trouver un moyen d'avoir des arguments positionnels argparse être mutuellement exclusifs à un argument optionnel.Argparse option args override positionnel

Par exemple:

./adder 20 32 
Output: 52 
./adder --interactive 
adder> 

En ce moment, si je devais juste essayer '--interactive', il me dit que je manque des arguments de position.

code Exemple:

parser = argparse.ArgumentParser() 
parser.add_argument('a', metavar='First') 
parser.add_argument('b', metavar='Second') 
parser.add_argument('--interactive') 
parser.parse_args() 

Je me demandais s'il y a une façon élégante de le faire (de préférence en utilisant la fonctionnalité argparse) de sorte que « --interactive » désactive l'exigence d'utiliser les deux arguments de position.

+0

pouvons-nous voir le code réel où vous spécifiez les arguments et autres? –

+0

Juste ajouté le code exemple – Princey

+0

avez-vous essayé 'add_argument ('parms', nargs = '*')'? les arguments sont rassemblés dans une liste, si l'argument positional est absent, la liste est vide. – georgexsh

Répondre

0

Les arguments positionnels ne peuvent généralement pas être omis. Vous pouvez essayer nargs='*' comme alternative.

parser = argparse.ArgumentParser() 
parser.add_argument('ab', nargs='*', type='int') 
parser.add_argument('--interactive', action='store_true') 
args = parser.parse_args() 

Utilisez la liste args.ab pour stocker l'argument de position. Si elle est omise, alors args.ab sera une liste vide.