3

コードベースが改善されているか悪化しているかを判断するために、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

これは可能ですか?これは、出力をファイルに書き込んでから、ファイルを 1 行ずつ読み取ることに似ていると思います。

4

2 に答える 2

5

シンプルに保ちたい場合は、var文字列を単純に分割できます。

var = `rubocop ../ -f fuubar -o ../coverage/rubocop_results.txt -f offenses`.split("\n")

その後、好きなように繰り返すことができvarます。

于 2014-05-03T00:10:03.373 に答える
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
于 2014-05-02T23:41:56.160 に答える