【问题标题】:Creating nested subcommands using Thor使用 Thor 创建嵌套子命令
【发布时间】:2020-08-09 20:51:51
【问题描述】:

我想创建一个 CLI 工具,它的命令格式如下:

clitool jobs execute some-job --arg1 value --arg2 another_value

是否可以在 Thor 中拥有子命令的子命令?我还想保留我在clitool jobs execute 子命令的类中为execute 下的任何其他子命令定义的class_options。

【问题讨论】:

    标签: ruby rubygems command-line-interface thor


    【解决方案1】:

    我已经成功使用了子命令的子命令,虽然有一个小错误。我没有尝试为子命令保留 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 被省略。也许那里有一位大师可以告诉我如何纠正它。

    【讨论】:

    • 谢谢!我只是再次尝试并得到相同的结果。不过,你是对的。帮助对话框中的错误是我感到困惑的地方。希望它可以在 Thor 中得到解决。
    • 刚刚也发现了这个问题。我认为这是我们遇到的问题:github.com/erikhuda/thor/issues/627
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-08
    • 2017-08-09
    • 1970-01-01
    • 1970-01-01
    • 2017-09-21
    相关资源
    最近更新 更多