python argparse -h like行为和互斥参数

时间:2013-09-18 17:49:35

标签: python argparse required

我的脚本通常会接受一个必需的参数,例如script.py PATH,但我也可以像script.py -e EXPRESSION那样调用它,并省略PATH

有没有办法用argparse做到这一点?

为了向后兼容,我想添加此功能,但不会更改现有行为,例如通过script.py --path PATH而不是script.py PATH传递路径

我希望这不应该太难,因为它类似于-h。

的行为

2 个答案:

答案 0 :(得分:1)

您可以使用互斥组,包括可选的位置参数

parser = argparse.ArgumentParser(usage='%(prog)s [-h] (PATH | -e EXPRESSION)')
group = parser.add_mutually_exclusive_group(required=True)
group.add_argument("PATH", nargs='?', help="Path")
group.add_argument("-e", "--expression", help="Regular expression")

print parser.parse_args()

默认用法不显示排他性组以及两个常规参数之间,这就是我添加自定义用法的原因。

答案 1 :(得分:0)

您可以使用“默认”选项,这样即使您未指定参数,也会分配它: 例如:

parser.add_argument("-p", "--path", action=selected_path, default=".",
                help="Specify the path for execution.")
parser.add_argument("-e", "--expression", action=expression_value, default=0,
                help="Specify the expression for execution.")