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

From: dezawa <dezawa@...>
Date: 2013-09-25 17:37:21 UTC
List: ruby-list #49604
出沢です

Windowsには詳しく無いのですが、、

> #--------------------------------------------------
> class String
>    def |(cmdline)
>      IO.popen(cmdline, "w+") do |pipe|
>        Thread.fork {
>          pipe.write self
>          pipe.close_write
>        }
>        pipe.read
>      end
>    end
> end

「pipe.close_write によってcmdline のstdoutのバッファがflushされる」
前に、pipe.read している、
ってことは無いですか?


while (fgets(buf, BUFLEN, stdion) != NULL) {
    /*
     * 1 行分のデータ処理。
     *  文字列をフィールドに分けて数値化
     *          split(/[,\t]+/).map(&:to_f) のイメージ
     *  あれこれ若干の数値的な計算をして
     */
    fprintf(stdout, "%e\t%e\t ....\n", a, b, ...)
}
fflush(stdout);

とかすると止まるとか。。。
    だめか、
    pipe.close_write されるまで、cmdlineにはEOF渡らないね
もしくは、必要byte数読み込まれるまで pipe.read を繰り返すか

「Open3.だと大丈夫なようだ」 との違いが説明できませんが

In This Thread