- blogs:
- cles::blog
2012/04/13

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


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 を使ってログインすることができます。
サイト内検索
検索ワードランキング
へぇが多いエントリ
閲覧数が多いエントリ
1 . アーロンチェアのポスチャーフィットを修理(114438)
2 . 福岡銀がデマの投稿者への刑事告訴を検討中(112957)
3 . 年次の人間ドックへ(112381)
4 . 2023 年分の確定申告完了!(1つめ)(111951)
5 . 三菱鉛筆がラミーを買収(111824)
2 . 福岡銀がデマの投稿者への刑事告訴を検討中(112957)
3 . 年次の人間ドックへ(112381)
4 . 2023 年分の確定申告完了!(1つめ)(111951)
5 . 三菱鉛筆がラミーを買収(111824)
cles::blogについて
Referrers