我想捕获rubocop攻击的总数,以确定我的代码库是变好还是变坏。我几乎没有使用ruby脚本的经验。
到目前为止,这是我的脚本:
#!/usr/bin/env ruby
#script/code_coverage
var = `rubocop ../ -f fuubar -o ../coverage/rubocop_results.txt -f offenses`
puts var
所以我./rails-app/script/code_coverage
和我的终端显示
...
--
6844 Total
当我var.inspect
时,我得到一个长串。我想要逐行读取rubocop ../ -f ...
的输出(首选)或将每行输出捕获到数组中。
我希望能够做到这样的事情:
var.each |line| do
if line.contains('total')
...
total = ...
end
这可能吗?我想这类似于将输出写入文件然后逐行读取文件。
答案 0 :(得分:4)
如果您想保持简单,只需拆分var
字符串。
var = `rubocop ../ -f fuubar -o ../coverage/rubocop_results.txt -f offenses`.split("\n")
然后你可以按照你想要的那样迭代var
。
答案 1 :(得分:2)
使用ruby的open3库。 Open3允许您访问stdin,stdout,stderr和一个线程,以便在运行另一个程序时等待子进程。您可以将程序的各种属性,重定向,当前目录等指定为Process.spawn。
http://blog.bigbinary.com/2012/10/18/backtick-system-exec-in-ruby.html
require 'open3'
# Run lynx on this file.
cmd = "lynx -crawl -dump /data/feed/#{file_name}.html > /data/feed/#{file_name}"
Open3.popen3(cmd) do |stdin, stdout, stderr, wait_thr|
cmdout = stdout.read
$logger.debug "stdout is:" + stdout.read
$logger.debug "stderr is:" + stderr.read
end