我想创建一个CLI工具,它的命令格式如下: clitool jobs execute some-job --arg1 value --arg2 another_value 有没有可能在雷神内部拥有子命令的子命令?我还想保留我在clitool jobs execute子命令的类中为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
$
2条答案
按热度按时间xoefb8l81#
我已经成功地使用子命令的子命令,尽管有一个小错误。我还没有尝试为子命令保留CLASS_OPTIONS,所以我没有答案。
对于嵌套子命令,可以执行以下操作:
这似乎做了您想做的事情:
似乎存在一个错误:子命令的子命令的帮助文本无法正常工作:
最后一个帮助文本应该显示“clitoolJobsEXECUTE SOME_JOB...”,但是前缀
jobs
被省略了。也许有一位大师可以告诉我如何纠正这一点。vc6uscn92#
我知道这有点离题,但这个问题出现在上面的答案和一些评论中。如果任何人需要显示Thor嵌套子命令帮助,并遇到了前面提到的“错误”,可以使用我创建的这个gem来处理它。我在我的几个宝石中使用了它:thor_nested_subcommand