Python解析带有命名参数的已知参数

Python解析带有命名参数的已知参数,python,argparse,Python,Argparse,我想将格式为--arg1 value1的任意参数集传递给我的python脚本,并在{'arg1':'value1}的字典中检索它们。我想使用argparse来实现这一点。函数parse_known_args允许额外的arg,但它们可以作为简单列表检索,并且不命名。更好的方法是定义一个包含两个参数(名称和值)的选项,并使用自定义操作使用这两个参数更新字典 class OptionAppend(Action): def __call__(self, parser, namespace, va

我想将格式为
--arg1 value1
的任意参数集传递给我的python脚本,并在
{'arg1':'value1}
的字典中检索它们。我想使用
argparse
来实现这一点。函数
parse_known_args
允许额外的arg,但它们可以作为简单列表检索,并且不命名。

更好的方法是定义一个包含两个参数(名称和值)的选项,并使用自定义操作使用这两个参数更新字典

class OptionAppend(Action):
    def __call__(self, parser, namespace, values, option_string):
        d = getattr(namespace, self.dest)
        name, value = values
        d[name] = value

p.add_argument("-o", "--option", nargs=2, action=OptionAppend, default={})
然后,您将编写
myscript-o arg1 value1-o arg2 value1
,而不是
myscript-o arg1 value1-o arg2 value1
,在
args=parser.parse_args()
之后,您将拥有
args.o={arg1':'value1',arg2':'value2}


这有点类似于使用列表或字典来保存一组相关变量,而不是一组单独命名的变量

 # Good
 v = [x, y, z]
 v = { 'key1': x, 'key2': y, 'key3': z}
 # Bad
 v1 = x
 v2 = y
 v3 = z

处理任意键/值对的问题已经多次出现
argparse
没有用于此的内置机制

(几乎是去年5月的副本)

您使用
parse_know_args
然后从
extras
构建自己的词典的想法是好的,而且可能是最简单的。如何处理附加列表将取决于用户的表现(可预测的
'--key',value'
对)。这与直接解析sys.arv[1://code>基本相同

如果用户提供类似于
--options key1:value1 key2=value2“key3 value3”
的输入,则可以在自定义操作类中解析这些对(例如,拆分分隔符上的字符串等)


--options“{key1:value1,key2:value2}”这样的输入可以作为
JSON
字符串处理,类型函数为:
type=JSON.load
(我必须查找它)。

您可以使用
add\u参数
方法简单地定义选项
parse_known_args
是一种方法,它将解析通过
add_argument
定义的所有选项并返回剩余的命令行,而使用
parse_args
将在有剩余参数时引发错误。额外的参数可以是任何名称/值,没有先验知识。那么,
argparse
就没有机会知道如何处理它。这就是
parse\u known\u args
的要点:您必须根据需要手动处理其余的参数。或者,您可以将语法从
--arg value
更改为类似
--define arg value
的内容,并定义一个自定义
操作
,以满足您的需要。我明白您的观点。我的想法主要是使用cmd行语法,如
--arg1 val1
argparse
将生成一个类似
extra_args={“arg1”:“val1”}
的字典。但是我想没有这样的选择,我必须自己建立字典。