Donner des options de type de dictionnaire avec python-argparse

problème

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)

Essayez d'utiliser

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'}

Recommended Posts

Donner des options de type de dictionnaire avec python-argparse
Dictionnaire type 2
Type de dictionnaire 1
Type de dictionnaire Contre-mesures d'erreur clé