2017-03-13 1 views
0

J'ai un script qui nécessite normalement un argument de position: some-script POS. Cependant, quand le drapeau "--version" est présent, je voudrais pouvoir "renoncer" à l'exigence de position arg: some-script --version.drapeau argparse pour ignorer les arguments positionnels

Existe-t-il un moyen approprié de le faire dans le cadre d'argparse? Je peux éventuellement utiliser "--version" in sys.argv, mais j'aimerais pouvoir utiliser argparse.

+0

ce qui est censé se produire avec 'version'? Imprimer un message et quitter (comme 'help'), ou définir des valeurs dans' args' (par exemple 'store_true') – hpaulj

Répondre

2

Il y a un version action qui rend cela possible:

parser.add_argument('--version', action='version', version='%(prog)s 1.0') 
1

Vous devrez rendre l'argument positionnel facultatif en définissant nargs='?' et déclencher à la place une erreur dans votre code s'il n'est pas présent. Par exemple:

parser.add_argument('POSITIONAL', dest='positional', nargs='?') 
... 
if parsed.positional is None: 
    print('Positional argument "POSITIONAL" is required') 
    sys.exit(1) 
+0

malheureusement, dans mon cas, l'argument de position est nécessaire, et je compte sur argparse pour attraper cela et jeter une erreur si elle n'est pas fournie. donc je ne peux pas le rendre facultatif. aussi, cela ne sera pas échelle si on a plusieurs arguments positionnels requis ou d'autres logique complexe – erjoalgo