【发布时间】:2013-05-23 06:54:32
【问题描述】:
我的程序应包含以下选项,由argparse 正确解析:
- 纯可选:
[-h, --help]和[-v, --version] - 互斥:
[-f FILE, --file FILE]和[-u URL, --url URL] - 如果选择了
--url,则可选:[-V, --verbose] - 如果选择了
--file或--url,则为必需:[-F, --format FORMAT]
所需的使用模式是:
prog.py [-h] [-v] [-f FILE (-F FORMAT) | -u URL [-V] (-F FORMAT) ]
-F 要求适用于互斥组的两个成员。
不确定是不是positional。
所以应该可以运行了:
prog.py -u "http://foo.bar" -V -F csv
如果我忘记了-F(他应该这样做),解析器会尖叫。
到目前为止我做了什么:
parser = ArgumentParser(decription='foo')
group = parser.add_mutually_exclusive_group()
group.add_argument('-f','--file', nargs=1, type=str, help='')
group.add_argument('-u','--url', nargs=1, type=str, help='')
parser.add_argument('-V','--verbose', action='store_true', default=False, help='')
parser.add_argument('-F','--format', nargs=1, type=str, help='')
因为它有一个“香草模式”可以在没有命令行参数的情况下运行,所以所有参数都必须是可选的。
如何在我的代码中实现第 3 点和第 4 点?
编辑:
我尝试将-f 和-u 作为子解析器,如here 所述,但子命令似乎被视为位置,如果我在没有参数的情况下运行它,解析器会给我一个error: too few arguments。
【问题讨论】:
-
你考虑过docopt吗?缺点是它允许选项值以
-e.g.,"-f a -F -u"(the format is "-u" here)开始 -
是否需要
-f和-u之一?如果是这样,我正在设想一个涉及子命令或位置参数的解决方案。 -
@chepner:不,他们不是。我希望程序也可以在没有参数和选项的情况下运行,因此它将启动用户对话框甚至 GUI
-
@J.F.Sebastian:
docopt看起来不错,我会深入研究并报告它是否适合我的需求
标签: python python-2.7 command-line-arguments argparse