我正在使用Ruby Rake在Ruby Terminal窗口上运行Selenium Webdriver脚本。所以,我在rakefile.rb中有代码如下:
task :default do
if ENV['scripts']
scripts = ENV['scripts'].split(',')
end
代码“scripts = ENV ['scripts']。split(',')”表示如果我想运行许多脚本ex:'test1.rb'& 'test2.rb',所以我必须在我想要运行的两个脚本的名称之间使用逗号(,),如下所示:
C:\>rake scripts=test1.rb,test2.rb
但现在我想更改代码,以便我可以使用空格字符b / w脚本而不是(,)
C:\>rake scripts=test1.rb test2.rb
我该怎么办,请帮忙,非常感谢。
答案 0 :(得分:2)
Rake会将第二个脚本视为对任务的调用,因此您需要将参数括在引号中来对其进行分组:
$ rake scripts='test1.rb test2.rb'
然后,您可以在Rake任务中不带参数调用split
:
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"]
最初的想法来自this blog post。