我想知道我是否可以在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-system1
否则将忽略--flash-system2
的值
如果可以修改代码,则可以以编程方式忽略它们,例如:
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']
刚分析参数之后
不是单一的使用模式,但您可以使用 2 种模式:
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
现场演示
附言
好吧,从技术上讲,你可以用一个单一的模式来做到这一点,但它开始变得很长......
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 模式解决方案。