[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.だと大丈夫なようだ」 との違いが説明できませんが