0

我正在使用 thor 创建一个 CLI 应用程序。它进展顺利,但现在我坚持使用子命令功能。

它的 github wiki 中没有任何内容,并且在 Google 上四处搜索,但没有任何帮助。

那么,有人可以向我展示或指出如何实现子命令功能吗?

4

2 回答 2

3

查看:http ://whatisthor.com/

从该站点(进行了一些编辑以节省空间并突出显示子命令的用法):

模块 GitCLI
  class Remote ", "添加一个以存储库命名的远程"
    选项 :t, :banner => ""
    选项 :m, :banner => ""
    选项 :f => :boolean, :tags => :boolean, :mirror => :string
    定义添加(名称,网址)
      # 实现 git 远程添加
    结尾

    desc "rename", "将远程命名为"
    def 重命名(旧,新)
    结尾
  结尾

  class Git [...]", "从另一个存储库下载对象和引用"
    选项 :all => :boolean, :multiple => :boolean
    选项 :append, :type => :boolean, :aliases => :a
    def fetch(repository, *refspec)
      # 在这里实现 git fetch
    结尾

    desc "remote SUBCOMMAND ...ARGS", "管理跟踪存储库集"
    子命令“远程”,远程 ### 此处使用的子命令...
  结尾
结尾

嗯……

于 2013-05-14T23:28:21.197 回答
2

尝试这样的事情(文件 test.rb):

#!/usr/bin/env ruby

require 'rubygems'
require 'thor'
require 'thor/group'  # This is required -- it's not a bug, it's a feature!

class Bar < Thor
  desc "baz", "Whatever"
  def baz
    puts "Hello from Bar"
  end
end

class Foo < Thor
  desc "go", "Do something"
  def go
    puts "Hello there!"
  end

  register Bar, :bar, "bar", "Do something else"
end

if __FILE__ == $0
  Foo.start
end

其行为如下:

> test.rb
Tasks:
  test.rb bar          # Do something else
  test.rb go           # Do something
  test.rb help [TASK]  # Describe available tasks or one specific task

> test.rb go
Hello there!
> test.rb bar
Tasks:
  test.rb baz             # Whatever
  test.rb help [COMMAND]  # Describe subcommands or one specific subcommand

> test.rb bar baz
Hello from Bar
> test.rb baz
Could not find task "baz".
>

(这主要按预期工作,除了“test.rb bar”的帮助信息不太正确,恕我直言。我认为它应该说“test.rb bar baz ...”,而不是“test.rb baz”。 ……”。)

希望这可以帮助!

于 2011-06-18T15:32:18.653 回答