[ruby-list:49601] Re: IO.popen に不具合?
From:
尾川敏也 <ogw@...>
Date:
2013-09-25 12:29:28 UTC
List:
ruby-list #49601
尾川です。
リプライありがとうございます。
Masatoshi SEKI <m_seki@mva.biglobe.ne.jp> wrote:
> 直感的には外部コマンドがあやしい気がするんですけど、
> どんなコードなんですか?
問題を見つけた時に使っていたのは、枠組みとしては以下のような何の変
哲もない C で書いたプログラムばかりです。
while (fgets(buf, BUFLEN, stdion) != NULL) {
/*
* 1 行分のデータ処理。
* 文字列をフィールドに分けて数値化
* split(/[,\t]+/).map(&:to_f) のイメージ
* あれこれ若干の数値的な計算をして
*/
fprintf(stdout, "%e\t%e\t ....\n", a, b, ...)
}
入出力は fgets と fprintf を使っているだけで、怪しげなことは何ひと
つしていません。
何よりも、
(a) Open3.pipeline_rw を使えばちゃんと動いている。
(b) Cygwin のシェルスクリプトの中の長いパイプラインの中で10年近く
安定して使っている。
の2点を考えると、私の外部コマンドに問題があるとは思いにくいのです
が、、、。
P.S.
余談ですが、上記のようなプログラムだけなら、ごちゃごちゃ言わずに全
部 Ruby で書き直した方が手っ取り早いかもしれないです。
ですが、最終的にはパイプライン(メソッドチェーン)の途中に、全デー
タを2次元配列としてメモリに展開して、それなりに複雑な数値計算(例
えば大規模な FFT とか)をするようなプログラムをいくつも挟む必要があ
ります。それらまで Ruby で書き換えるのは、ちょっと、という状況です。
--
尾川敏也 ogw@shizuokanet.ne.jp
http://www6.shizuokanet.ne.jp/ogw/