有没有一种方法可以让argparse
接受任意标志?
例如,我有一个覆盖git push
的包装器称为gitter
我不想指定所有可用于git push
的标志,因为有很多。
但是,我仍然希望能够执行类似以下的操作
gitter --all --no-verify
有没有一种方法让argparse
接受任意标志,并将这些标志传递给git push
?
如果我执行gitter --fake-flag
,我会立即收到错误,而没有解析出标志的机会。
parse_known_args
将未被识别的标志保存在列表中。p = ArgumentParser()
p.add_argument("--foo")
args, remaining = p.parse_known_args("--foo 5 --bar --baz".split())
# args.foo == 5
# remaining = ["--bar", "--baz"]
#!/bin/bash
git push --alwaysArg "$@"
运行时:
gitter --all --no-verify
生成的命令将是:
git push --alwaysArg --all --no-verify
parse_known_args
不需要您定义 任何 标志; 命令行上未定义的任何内容都会按顺序放在parse_known_args
返回的元组的第二个元素中。已识别的标志将被解析、删除并用于设置第一个元素的属性。 - chepnerArgumentParser()
生成"--foo 5 --bar --baz".split()
?在尝试了一番后,我尝试了parse_args()
,但它返回一个无法转换为列表对象的namespace
对象。 - Andyparse_args
和parse_known_args
都只需要一个单词列表(默认为sys.argv[1:]
)作为参数。我使用split
作为一种快速而简单的方法,从字符串生成一个列表。 - chepner