[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/

In This Thread