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の引数が長いみたい。
これが使えると、いいな。
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