Ruby

以下は、ためしに作ったモジュールね。10秒かかったら時間切れになって、 Process.killで止める仕様にしてあるわ。

で、止めるためのpidの取得には IO.popenのリターンを使うと。

「なんでわざわざdiffを呼んでるの」って話はナシね。あくまでサンプルだから。

require 'timeout'
class String
 # テキスト差分を取り出す(UTF-8)
 def dSabunU(b)
   w1 = "/tmp/w1w"
   w2 = "/tmp/w2w"
   w3 = "/tmp/w3w"
   FileUtils.cp(self,w1)
   FileUtils.cp(b,w2)
   w1.du_conv2
   w2.du_conv2
   ans = nil
   s = []
   pid = nil
   begin
     timeout(10){
       com = IO.popen("diff --strip-trailing-cr \"#{w1}\" \"#{w2}\" > \"#{w3}\"")
       pid = com.pid
       s = w3.loadfile.split(/\r\n/)
       if s[s.length-1] =~ /ファイル末尾に改行がありません/
         s[s.length-1] = nil
         s.compact!
       end
       ans = s.join("")
     }
   rescue Timeout::Error => e
     ans = nil
     Process.kill('SIGINT',pid)
   rescue
   end
   STDOUT.sync
   File.unlink(w1) if File.exist?(w1) == true
   File.unlink(w2) if File.exist?(w2) == true
   File.unlink(w3) if File.exist?(w3) == true
   ans
 end
end

トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2016-04-14 (木) 19:05:25