BLOGTIMES
2012/04/13

ruby から外部プログラムの標準入出力を使う

  ruby  programming 
このエントリーをはてなブックマークに追加

Ruby から外部のプログラムを起動して、標準入力にデータを渡して、標準出力からデータを受け取る方法が分からなくてハマったのでメモ。
IO.popen*1 を使えばいいみたいです。
テストとして awk の FizzBuzz を ruby から呼び出すサンプルを書いてみました。

awk_fizzbuzz.rb

IO.popen('awk \'{print $0 % 15 ? $0 % 5 ? $0 %3 ? $0 : "Fizz" : "Buzz" : "FizzBuzz"}\'', 'r+') do |io| (1..20).each do |i| io.puts i end io.close_write while line = io.gets puts line end end

なんの変哲もないコードですが、バッファされる関係があるので close_write を呼ぶのがミソですね。
これを呼ばないと、コマンドに標準入力が渡らないので、 io.gets の部分でだんまりになってしまいます。


トラックバックについて
Trackback URL:
お気軽にどうぞ。トラックバック前にポリシーをお読みください。[policy]
このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/4893
Trackbacks
このエントリにトラックバックはありません
Comments
愛のあるツッコミをお気軽にどうぞ。[policy]
古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
コメントはありません
Comments Form

コメントは承認後の表示となります。
OpenIDでログインすると、即時に公開されます。

OpenID を使ってログインすることができます。

Identity URL: Yahoo! JAPAN IDでログイン