[ruby-list:49609] Re: IO.popen に不具合?

From: dezawa <dezawa@...>
Date: 2013-09-27 15:29:50 UTC
List: ruby-list #49609
> これは単なる趣味です。見た目が少しでもシェルスクリプトのパイプライ
> ンに似ていた方が私としては見やすく感じた、というだけのことです。

やはり。これは多分そうだろうなぁと予想してました。

> 特に今回の私の場合は、扱うデータのサイズが大きくて pipe のバッファ
> を越えるのは明らかだったので、その方が安全そうに思えたものですから。

なるほど、それですとThreadしたほうが良さそうですね。
ただ、http://doc.ruby-lang.org/ja/2.0.0/class/Open3.html
の例とは違うところがあって、
例では
stdout.each do |line|   print line ;end
とEOFまで繰り返し読み込んでいるので、必ず最後まで読みますが

尾川さんの場合は   pipe.read 一回なので、
 # その時点でpipeにある物だけ読んで終わります。
 # タイミング悪くThead側が終わらない内にメインにタスクが
 # 切り替わると、読み足りない事が起きるのではないでしょうか

# の部分正しいか、識者よろしく。

  ret = ""
  while data=pipe.read; ret += data;end
  ret

とでもしてみるとどうでしょうか。
        う〜〜〜 汚い。。。誰か綺麗にして。

In This Thread