Geben Sie mit python-argparse Optionen für Wörterbuchtypen an

Problem

Ich möchte mehrere Werte in die Befehlszeilenoption eingeben, aber ich möchte sie als benanntes Wörterbuch anstelle des Listenformats eingeben

Mit anderen Worten

hoge.py --param a=foo --param b=param wenn bar= {"a": "foo", "b": "bar"]Ich möchte das Argument herausnehmen.



# Lösung
 Definieren Sie die ursprüngliche argparse.Action. Sie können eine Klasse erstellen, die Action erbt, und die Methode __call__ überschreiben.

 Da die rohe Zeichenfolge in Werten enthalten ist, können Sie sie entsprechend dem Namespace hinzufügen. In diesem Problem ist Namespace.param möglicherweise bereits vorhanden. Überprüfen Sie sie daher. .. Die Zeichenfolge "param" ist übrigens in self.dest enthalten.

```py
import argparse
class ParamProcessor(argparse.Action):
    """
    --param foo=argparse, um ein Typargument in das Wörterbuch einzufügen.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)

Versuchen Sie es mit

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

Geben Sie mit python-argparse Optionen für Wörterbuchtypen an
Wörterbuchtyp 2
Wörterbuchtyp 1
Gegenmaßnahmen für Schlüsselfehler des Wörterbuchtyps