0

我正在使用 Ruby Rake 在 Ruby 终端窗口上运行 Selenium Webdriver 脚本。所以,我在 rakefile.rb 中有如下代码:

task :default do
    if ENV['scripts']
       scripts = ENV['scripts'].split(',')
end

代码“scripts = ENV['scripts'].split(',')”的意思是如果我想运行许多脚本例如:'test1.rb'&'test2.rb',所以我必须使用逗号( ,) 在我要运行的两个脚本的名称之间,如下所示:

C:\>rake scripts=test1.rb,test2.rb

但现在我想更改代码,以便我可以使用空格字符 b/w 脚本而不是 (,)

C:\>rake scripts=test1.rb test2.rb

我该怎么做,请帮助,非常感谢。

4

1 回答 1

2

Rake 会将第二个脚本视为对任务的调用,因此您需要通过将参数括在引号中来对它们进行分组:

$ rake scripts='test1.rb test2.rb'

然后,您可以split在 Rake 任务中不带参数地调用:

task :default do
  if ENV['scripts']
    scripts = ENV['scripts'].split
    p scripts
  end
end

这将产生:

$ rake scripts='test1.rb test2.rb'
["test1.rb", "test2.rb"]

另一种选择是自己摆弄命令行参数,然后使用命令行参数的名称动态定义任务,因此 rake 不会抱怨缺少任务。我已将其提取到with_args此处调用的方法中:

# expose command line arguments
def with_args &block
  args = ARGV.dup
  args.shift
  block.call(args)
  args.each{|arg| task(arg.to_sym) }
end

你可以像这样使用它:

task :default => [:scripts]

task :scripts do
  with_args do |files|
    p files
  end
end

然后以这种方式调用 rake 任务:

$ rake scripts test1.rb test2.rb
["test1.rb", "test2.rb"]

最初的想法来自这篇博文。

于 2013-04-04T07:59:02.280 回答