人気ブログランキング | 話題のタグを見る

rubyで外部コマンドの標準入力

rubyで外部コマンドの標準入力をするには、
IO.popenを使っている。
こんな感じ。

eval = <<-EOF
set terminal svg
set output
plot sin(x)
EOF

image = nil
IO.popen("gnuplot" ,"r+") do |io|
io.write(eval)
io.close_write
image = io.read
end
IO.popen("display" ,"w") do |io|
io.write(image)
end

これを、一つにまとめると

IO.popen("gnuplot | display" ,"w") do |io|
io.write(eval)
end

もう少し、短く書けないかな?ってことで
バッククウォートを使って

`echo '#{eval}' | gnuplot | display`

こう書けて、成功する。
だけど、これを分けて

image = `echo '#{eval}' | gnuplot`
`echo '#{image}' | display`

こうすると、
2行目でエラーになる。
どうも、echoの引数が長いみたい。
これが使えると、いいな。
by gaziya | 2011-06-15 20:07