Je souhaite saisir plusieurs valeurs dans l'option de ligne de commande, mais je souhaite le saisir sous forme de dictionnaire nommé au lieu de format de liste
En d'autres termes
hoge.py --param a=foo --param b=param quand bar= {"a": "foo", "b": "bar"]Je veux éliminer l'argument.
# Solution
Définissez le paramètre Argparse.Action d'origine. Vous pouvez créer une classe qui hérite de Action et remplacer la méthode __call__.
Puisque la chaîne de caractères brute est incluse dans les valeurs, vous pouvez l'ajouter de manière appropriée à l'espace de noms, mais dans ce problème, namespace.param peut déjà exister, alors vérifiez-le. .. À propos, la chaîne de caractères "param" est incluse dans self.dest.
```py
import argparse
class ParamProcessor(argparse.Action):
"""
--param foo=argparse pour mettre un argument de type dans le dictionnaire.Action
"""
def __call__(self, parser, namespace, values, option_strings=None):
param_dict = getattr(namespace,self.dest,[])
if param_dict is None:
param_dict = {}
k, v = values.split("=")
param_dict[k] = v
setattr(namespace, self.dest, param_dict)
parser=argparse.ArgumentParser()
parser.add_argument("--param", action=ParamProcessor)
args = parser.parse_args()
print(args.param)
$ python hoge.py --param foo=a --param bar=b
>>> {'foo': 'a', 'bar': 'b'}