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”}
的字典。但是我想没有这样的选择,我必须自己建立字典。