ruby - 使用 Thor 创建嵌套子命令
问题描述
我想创建一个 CLI 工具,它的命令格式如下:
clitool jobs execute some-job --arg1 value --arg2 another_value
是否可以在 Thor 中拥有子命令的子命令?我还想保留我在类中为clitool jobs execute
子命令定义的 class_options 以用于execute
.
解决方案
我已经成功使用了子命令的子命令,虽然有一个小错误。我没有尝试为子命令保留 class_options,所以我没有答案。
对于嵌套的子命令,以下工作:
class Execute < Thor
desc 'some_job', 'Execute something'
option :arg1, type: :string, desc: 'First option'
option :arg2, type: :string, desc: 'Second option'
def some_job
puts "Executing some_job:"
puts " --arg1 = #{options[:arg1]}"
puts " --arg2 = #{options[:arg2]}"
end
end # class Execute
class Jobs < Thor
# Other task definitions
desc 'execute', 'Execute jobs'
subcommand 'execute', Execute
end # class Jobs
class CliTool < Thor
# Other task definitions
desc 'jobs', 'Do stuff with jobs'
subcommand 'jobs', Jobs
end
CliTool.start
这似乎做你想做的事:
$ clitool jobs execute some-job --arg1 value --arg2 another_value
Executing some_job:
--arg1 = value
--arg2 = another_value
$
似乎有一个错误:子命令的子命令的帮助文本无法正常工作:
$ clitool help
Commands:
clitool help [COMMAND] # Describe subcommands or one specific subcommand
clitool jobs # Do stuff with jobs
$ clitool jobs help
Commands:
clitool jobs execute # Execute jobs
clitool jobs help [COMMAND] # Describe subcommands or one specific subcommand
$ clitool jobs help execute
Commands:
clitool execute help [COMMAND] # Describe subcommands or one specific subcommand
clitool execute some_job # Execute something
$
最后的帮助文本应显示“clitool jobs execute some_job...”,但前缀jobs
被省略。也许那里有一位大师可以告诉我如何纠正它。
推荐阅读
- python - 熊猫:给定一个开始和结束日期,为中间的每一天添加一列,然后添加值?
- javascript - 如何正确使用 module.exports?
- etl - 如何保证或检测 flink 中的数据完整性?
- python - 移除 matplotlib 底图周围的矩形边框
- php - 带有表单验证的 CodeIgniter AJAX JSON 验证器
- c++ - 如何在 C++ 中比较多个 .txt 文件?
- python - 生成一个随机词的列表,随机次数
- javascript - 尝试发送组合键击 (Shift RightArrow) 或触发事件 JQ 2.0.3
- r - 从同一数据集的不同变量创建平滑图
- javascript - 节点 mysql.js。如何正确关闭连接