我的程序应包括以下选项,由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
要求适用于互斥组的两个成员。
不确定它是否是一个位置。
所以应该可以运行:
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
作为子解析器,如此处所述,但子命令似乎被视为位置,error: too few arguments
如果我在没有参数的情况下运行它,解析器会给我一个。