[ruby-list:49605] Re: IO.popen に不具合?
From:
尾川敏也 <ogw@...>
Date:
2013-09-26 11:58:38 UTC
List:
ruby-list #49605
尾川です。
コメントありがとうございます。
田中さん wrote:
> > [B] で join してみる意味はありますでしょうか?
> 書いたように、もしスレッドの中で例外が発生していれば、意味はあるんじゃないでしょうか。
試してみました。
def |(cmdline)
IO.popen(cmdline, "w+") do |pipe|
t = Thread.fork {
pipe.write self
pipe.close_write
}
result = pipe.read
t.join # [B] ここで待ち合わせ
result
end
end
結果は何も変わらず、以前と同じように繰り返し実行すると時折エラーに
なり、エラーになった時も Ruby から特別なメッセージの類が表示される
ことはありませんでした。
スレッドのことはあまり判っていないのですが、ハチドリ本の中のスレッ
ドと例外のところを見ていたら、abort_on_exception というインスタンス
変数のことが載っていたので、これも試してみました。
上記の [B] のところを t.join の代わりに
t.abort_on_exception = true
と書き換えてみましたが、やはり何も変わらず、時折気まぐれにエラーに
なり、その時も Ruby からのメッセージの類は無し、でした。
スレッドの中で例外が起きているというわけでは無い、ということなのか
と思います。
--
尾川敏也 ogw@shizuokanet.ne.jp
http://www6.shizuokanet.ne.jp/ogw/