それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

pv pipe viewer をcaptureする

プロセスの進捗を見る pv で

pv はプロセスパイプを通過したバイト数をみて、進捗を見ることが出来るのですが。

pv の出力をスクリプトから取りたい

pv の output は stderr に書かれるのだけれど、それをキャプチャリングしたいなと思ったら。。。結構面倒くさいのです。

pv は プロセスの起動をアレコレしているっぽくて、ターミナルのFdに直接書いてるわけではなさそうなのです. たぶん tty とかに直接かいてるんじゃないかな。

-f オプションを使う。

オプションを使うことでstderr に書き出す事ができる。

pv -f hdd.img | lzop ...  2> out.log

ruby とかで spawn / fork するには

r,w= IO.pipe
cmd = 'pv -f  IMG_3200.MOV | cat - > /dev/null'
puts cmd
pid =  Process.fork do
  r.close
  STDERR.reopen w
  Process.exec cmd
end
s = ''
w.close
while s = r.read(100) do
  puts s
end

Process.waitpid pid

こうすれば、進捗を変数に取り出すことが出来た。あーこれはハマるわ。。。 ffmpeg の進捗をもっと簡単に取る方法ないのかな。。。。

関連資料

http://takuya-1st.hatenablog.jp/entry/2017/03/06/172644

参考資料

http://www.ivarch.com/programs/quickref/pv.shtml