单击概念¶
本节涵盖有关Click设计的概念。
回调评估命令¶
Click的工作方式与其他一些命令行解析器有点不同,因为它试图在调用任何回调之前协调程序员定义的参数顺序与用户定义的参数顺序。
当将复杂模式从optparse或其他系统移植到Click时,这是需要理解的一个重要概念。 optparse中的参数回调调用是在解析步骤的一部分发生的,而Click中的回调调用是在解析步骤之后发生的。
主要区别在于,在optparse中,回调是在原始值发生时调用的,而Click中的回调是在值完全转换后调用的。
通常,调用顺序由用户向脚本提供参数的顺序驱动;如果有调用的选项 --foo
还有一个选项称为 --bar
用户称其为 --bar --foo
,然后回调 bar
会在一个之前开火 foo
.
该规则有三个例外,需要了解:
- 忠诚度:
选项可以设置为“渴望”。 所有渴望参数都在所有非渴望参数之前被评估,但再次按照用户在命令行上提供的顺序进行评估。
这对于像这样执行和退出的参数非常重要
--help
和--version
. 两者都是渴望的参数,但命令行上先出现的任何参数都将获胜并退出程序。- 重复参数:
如果一个选项或参数因重复而在命令行上被拆分为多个地方--例如,
--exclude foo --include baz --exclude bar
--回调将根据第一个选项的位置触发。 在这种情况下,回调将触发exclude
并且将通过这两种选择 (foo
和bar
),然后回调include
将与baz
只.请注意,即使参数不允许多个版本,Click仍然会接受第一个版本的位置,但它会忽略除最后一个之外的所有值。 这样做的原因是允许通过设置默认值的Shell别名进行组合。
- 缺失参数:
如果命令行上没有定义参数,则回调仍然会触发。 这与optparse中未定义的值不会触发回调的工作方式不同。 丢失的参数会在最后触发它们的回调,这使得它们可以默认为之前参数的值。
大多数时候,您不需要担心任何这些,但了解它在一些高级案例中如何工作非常重要。