python argparse 额外参数
python argparse extra args
我想使用 argparse
获得额外的参数,但不知道它们是什么。
例如,在 maven
中,我们可以添加以下形式的参数:
-Dmaven.test.skip=true
或 -Dcmd=compiler:compile
我想使用 argparse
在 python 中得到同样的东西,并得到某种带有所有参数的 dict
..
我知道我可以使用:
aparser.parse_known_args()
但是我需要解析额外的参数(删除 -D
并按 =
拆分)。想知道是否有开箱即用的东西?
谢谢!
您可以使用
parser.add_argument('-D', action='append', default=[])
这将转变论点
-Dfoo -Dbar=baz
进入
>>> args.D
['foo', 'bar=baz']
并且没有 -D
个参数将意味着 args.D
将 return 一个空列表。
如果您希望将它们作为字典就在那里,您可以进行自定义操作:
def ensure_value(namespace, dest, default):
stored = getattr(namespace, dest, None)
if stored is None:
return value
return stored
class store_dict(argparse.Action):
def __call__(self, parser, namespace, values, option_string=None):
vals = dict(ensure_value(namespace, self.dest, {}))
k, _, v = values.partition('=')
vals[k] = v
setattr(namespace, self.dest, vals)
parser.add_argument('-D', default={}, action=store_dict)
给定 -Dfoo -Dbar=baz
将导致
>>> args.D
{'bar': 'baz', 'foo': ''}
比使用 action='append'
和
稍微 更冗长
>>> as_dict = dict(i.partition('=')[::2] for i in args.D)
我想使用 argparse
获得额外的参数,但不知道它们是什么。
例如,在 maven
中,我们可以添加以下形式的参数:
-Dmaven.test.skip=true
或 -Dcmd=compiler:compile
我想使用 argparse
在 python 中得到同样的东西,并得到某种带有所有参数的 dict
..
我知道我可以使用:
aparser.parse_known_args()
但是我需要解析额外的参数(删除 -D
并按 =
拆分)。想知道是否有开箱即用的东西?
谢谢!
您可以使用
parser.add_argument('-D', action='append', default=[])
这将转变论点
-Dfoo -Dbar=baz
进入
>>> args.D
['foo', 'bar=baz']
并且没有 -D
个参数将意味着 args.D
将 return 一个空列表。
如果您希望将它们作为字典就在那里,您可以进行自定义操作:
def ensure_value(namespace, dest, default):
stored = getattr(namespace, dest, None)
if stored is None:
return value
return stored
class store_dict(argparse.Action):
def __call__(self, parser, namespace, values, option_string=None):
vals = dict(ensure_value(namespace, self.dest, {}))
k, _, v = values.partition('=')
vals[k] = v
setattr(namespace, self.dest, vals)
parser.add_argument('-D', default={}, action=store_dict)
给定 -Dfoo -Dbar=baz
将导致
>>> args.D
{'bar': 'baz', 'foo': ''}
比使用 action='append'
和
>>> as_dict = dict(i.partition('=')[::2] for i in args.D)