thor wiki页面制造一个可扩展的向您展示了如何创建一个thor驱动的CLI命令,如下所示:
bash ./mythorcommand foo
这要求您将thor任务foo作为第一个参数传递。
我还可以使用thor的default_method运行不带任何参数的thor可执行文件
bash ./mythorcommand
但是,我希望传入一个变量字符串作为第一个参数:
bash ./mythorcommand "somevalue"
这不起作用,因为thor命令期望第一个参数是任务名。是否有一种方法可以忽略任务名称并将第一个参数发送到默认方法?
如果这个功能不存在,我认为添加一个将所有命令行参数传递到一个任务/方法中的方法是非常有用的:
class MyThorCommand < Thor
only_method :default
def default(*args)
puts args.inpsect
end
end
MyThorCommand.start发布于 2011-12-02 20:34:47
您应该从Thor::Group和那个调用开始方法中扩展
class Test < Thor::Group
desc "Act description"
def act
puts "do smth"
end
end
Test.start发布于 2014-05-30 13:38:28
对于这个问题,我找到了一个相当“奇怪”的解决方案,对我来说效果很好。
向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”。
希望能帮上忙。
发布于 2011-09-05 17:57:08
虽然这并不能完全解决您的问题,但可以使用Thor.map调用命令,只提供一个选项标志:
map '-F' => 'foo'现在您还可以传递参数。
mythorcommand -F bar # => invokes foo("bar")https://stackoverflow.com/questions/7277604
复制相似问题