docopt中的相关选项

时间:2019-04-15 09:22:04

标签: python docopt

我想知道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的值将被忽略

2 个答案:

答案 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

Live demo


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模式解决方案。