プロセスの進捗を見る 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