Je veux passer une liste de noms dans mon programme écrit en Python à partir de la console. Par exemple, je voudrais utiliser un moyen similaire à cela (je sais que cela ne devrait pas fonctionner à cause de bash
):
$ python myprog.py -n name1 name2
J'ai donc essayé ce code:
# myprog.py
from argparse import ArgumentParser
parser = ArgumentParser()
parser.add_argument('-n', '--names-list', default=[])
args = parser.parse_args()
print(args.names_list) # I need ['name1', 'name2'] here
Cela a conduit à l'erreur:
usage: myprog.py [-h] [-n NAMES_LIST]
myprog.py: error: unrecognized arguments: name2
Je sais que je pourrais passer les noms avec des guillemets "name1 name2"
Et le diviser en mon code args.names_list.split()
. Mais je suis curieux, existe-t-il un meilleur moyen de passer la liste des chaînes via le module argparse
.
Toute idée serait appréciée.
Merci!
Vous devez définir --names-list
pour prendre un nombre arbitraire d'arguments.
parser.add_argument('-n', '--names-list', nargs='+', default=[])
Notez que les options avec un nombre arbitraire d'arguments ne fonctionnent généralement pas bien avec les arguments de position, cependant:
# Is this 4 arguments to -n, or
# 3 arguments and a single positional argument, or ...
myprog.py -n a b c d
Vous devez utiliser nargs
:
parser.add_argument('-n', '--names-list', nargs="*")
parser.add_argument('-n', '--names-list', default=[], nargs='+')