1

我的脚本通常会接受像这样的必需参数,script.py PATH但我也可以这样称呼它script.py -e EXPRESSION并一起省略PATH

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

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

我希望这不会太难,因为它类似于 -h 的行为。

4

2 回答 2

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()

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

于 2013-09-18T19:32:47.253 回答
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.")
于 2013-09-18T17:55:45.257 回答