我要尝试的第一件事是使用parse_kNown_args
其他参数,并extras
使用on例程处理列表。添加’– conf-‘处理argparse
将更加繁琐。
argv = '--conf-key-1 value1 --conf-key-2 value2'.split()
p = argparse.ArgumentParser()
args, extras = p.parse_kNown_args(argv)
def foo(astr):
if astr.startswith('--conf-'):
astr = astr[7:]
astr = astr.replace('-','_')
return astr
d = {foo(k):v for k,v in zip(extras[::2],extras[1::2])}
# {'key_1': 'value1', 'key_2': 'value2'}
该extras
分析可以更稳健-确保有适当的对,拒绝格式错误的按键,操作=
。
另一种方法是扫描sys.argv
的--conf-
字符串,并使用它们来构建add_argument
语句。
keys = [k for k in argv if k.startswith('--conf-')]
p = argparse.ArgumentParser()
for k in keys:
p.add_argument(k, dest=foo(k))
print vars(p.parse_args(argv))
如果您接受“ –conf key1 value1 –conf key2 value2 …”作为输入,则可以定义
parser.add_argument('--conf', nargs=2, action='append')
会产生:
namespace('conf': [['key1','value1'],['key2','value2']])
可以很容易地变成字典。或者,风俗习惯Action
可以setattr(namespace, values[0], values[1])
将键/值对直接输入到命名空间中。
我相信关于接受’“ key1:value”“ key2:value2”’输入存在SO问题。