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