我想知道docopt中是否可以有依赖选项。
示例:
"""
Description:
Flash a system with the manufacturing software from the specifiedx folder.
Usage:
flash_drop.py (--drop-dir=<DIR>) [--factory-reset=<BOOL>] [--flash-all=<BOOL>] [--flash-system1=<BOOL> | --flash-system2=<BOOL>]
flash_drop.py -h | --help
flash_drop.py --version
Options:
-h --help Show this screen.
--version Show version.
--drop-dir=DIR Path to the drop directory
--factory-reset=BOOL Factory reset the chips on all selected devices. [default: False]
--flash-all=BOOL Flash all devices. [default: False]
--flash-system1=BOOL Flash first system. [default: False]
--flash-system2=BOOL Flash second system. [default: False]
"""
即,如果未选择前一个选项,则忽略选项的值。例如,除非设置--flash-system2
,否则--flash-system1
的值将被忽略
答案 0 :(得分:0)
如果可以修改代码,则可以通过编程方式忽略它们,例如:
args['flash-system2'] = args['flash-system2'] if args['flash-system1'] else None
或
if ('flash-system2' in args) and ('flash-system1' not in args):
del args['flash-system2']
仅在解析完参数后
答案 1 :(得分:0)
不是使用单一的使用模式,而是可以使用两种模式:
Usage:
flash_drop.py (--drop-dir=<DIR>) [options] [--flash-system1=<BOOL>]
flash_drop.py (--drop-dir=<DIR>) [options] --flash-system1=<BOOL> --flash-system2=<BOOL>
但使用三种模式可能更好,更易于阅读IMO:
Usage:
flash_drop.py (--drop-dir=<DIR>) [options]
flash_drop.py (--drop-dir=<DIR>) [options] --flash-system1=<BOOL>
flash_drop.py (--drop-dir=<DIR>) [options] --flash-system1=<BOOL> --flash-system2=<BOOL>
flash_drop.py -h | --help
flash_drop.py --version
P.S。
好吧,您可以,技术上,使用单个模式进行操作,但是它开始变得很长...
Usage:
flash_drop.py (--drop-dir=<DIR>) [options] [(--flash-system1=<BOOL>) | (--flash-system1=<BOOL> --flash-system2=<BOOL>)]
行可能会断开,所以也许:
Usage:
flash_drop.py (--drop-dir=<DIR>) [options]
[(--flash-system1=<BOOL>) | (--flash-system1=<BOOL> --flash-system2=<BOOL>)]
我个人更喜欢3模式解决方案。