[英]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.