簡體   English   中英

Thor可執行文件-忽略任務名稱

[英]Thor Executable - Ignore Task Name

Wiki頁面, 使Exectable可操作 ,向您展示了如何創建一個由thor驅動的CLI命令,如下所示:

bash ./mythorcommand foo

這要求您將任務foo作為第一個參數傳遞。

我也可以使用thor的default_method運行不帶任何參數的thor可執行文件:

bash ./mythorcommand

但是,我想將變量字符串作為第一個參數傳遞:

bash ./mythorcommand "somevalue"

這不起作用,因為命令要求第一個參數是任務名稱。 有沒有辦法忽略任務名稱並將第一個參數發送給默認方法?

如果此功能不存在,我認為添加一種將所有命令行參數傳遞到一個任務/方法中的方法將非常有用:

class MyThorCommand < Thor
  only_method :default

  def default(*args)
    puts args.inpsect
  end 
end 

MyThorCommand.start

您應該從Thor :: Group擴展該調用開始方法

class Test < Thor::Group
  desc "Act description"
  def act
    puts "do smth"
  end
end

Test.start

對於這個問題,我找到了一個相當“奇怪”的解決方案,該解決方案對我來說很好。

您將默認任務添加到Thor。 比起添加method_missing,以便如果應用程序有參數,可以誘使Thor傳遞默認方法作為參數。

以您的示例為例,解決方案如下所示:

class MyThorCommand < Thor
  default_task :my_default

  desc "my_default", "A simple default"
  def my_default(*args)
    puts args.inspect
  end 

  def method_missing(method, *args)
    args = ["my_default", method.to_s] + args
    MyThorCommand.start(args)
  end

end 

MyThorCommand.start(ARGV)

如果這在文件“ my_thor.rb”中,則執行“ ruby​​ my_thor.rb foo bar”將結果顯示為“ [“ foo”,“ bar”]'。

希望能幫助到你。

盡管這不能完全解決您的問題,但一種替代方法可能是使用Thor.map通過僅提供一個選項標志來調用命令:

map '-F' => 'foo'

現在您還可以傳遞參數

mythorcommand -F bar # => invokes foo("bar")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM