Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Python单击调用另一个子命令不会';似乎无法验证字段_Python_Command Line Interface_Python Click - Fatal编程技术网

使用Python单击调用另一个子命令不会';似乎无法验证字段

使用Python单击调用另一个子命令不会';似乎无法验证字段,python,command-line-interface,python-click,Python,Command Line Interface,Python Click,如果我从另一个命令调用Click子命令,那么调用的命令看起来并不是在验证传递的字段。我做错什么了吗 这是一个小例子: cli_main.py cli_sub.py cli_add.py 电话示例: python cli_main.py add number --number 1 Add 1 python cli_main.py subtract number --number 1 Subtract 1 python cli_main.py subtract number Usage: cl

如果我从另一个命令调用Click子命令,那么调用的命令看起来并不是在验证传递的字段。我做错什么了吗

这是一个小例子:

cli_main.py cli_sub.py cli_add.py
电话示例:

python cli_main.py add number --number 1
Add 1

python cli_main.py subtract number --number 1
Subtract 1

python cli_main.py subtract number
Usage: cli_main.py subtract number [OPTIONS]
Try "cli_main.py subtract number --help" for help.

Error: Missing option "--number".
这些工作正如预期的那样。但是,如果我调用以下命令,它会以意外的方式失败

python cli_main.py add number --number -1
Subtract None
它确实调用了减法。问题是我没有在调用中传递参数:

ctx.invoke(cli_sub.number)
因此,我预计它会失败,并向我提供用法文本,特别是因为需要
number
选项


我是否没有正确调用此子命令?为什么调用不触发参数检查的方式与不使用参数直接调用子命令的方式相同?

您对问题的分析是正确的,您确实需要传递参数。您可以通过以下方式传递参数:

ctx.invoke(cli_sub.number, number=number)
关于你的另一个问题:

为什么调用不触发参数检查的方式与不使用参数直接调用sub命令的方式相同


此检查在解析参数时完成。如果您直接调用
ctx.invoke()
,您应该了解命令需要什么。

您对问题的分析是正确的,您确实需要传递参数。您可以通过以下方式传递参数:

ctx.invoke(cli_sub.number, number=number)
关于你的另一个问题:

为什么调用不触发参数检查的方式与不使用参数直接调用sub命令的方式相同


此检查在解析参数时完成。如果您直接调用
ctx.invoke()
,希望您了解您的命令需要什么。

谢谢Stephen。这不是我所希望的答案,但我必须这样做。我希望将一个命令包装到另一个命令中,以便通过传入一个文件并使用现有命令验证参数来批量添加一组项:谢谢你的帮助,斯蒂芬。这不是我所希望的答案,但我必须这样做。我希望将一个命令包装到另一个命令中,以便通过传入一个文件并使用现有命令验证参数来批量添加一组项:我感谢你的帮助。
ctx.invoke(cli_sub.number)
ctx.invoke(cli_sub.number, number=number)