openの別の使い方。

openはファイルの読み書きだけではなく、外部コマンドとの連携が可能。素敵。

open("| ls", "r") do |ls|
  while line = ls.gets
    p line
  end
end

結果。

hoge.rb
hoge.txt

lsコマンドの結果であるファイルの一覧が出力される。
こういう場合、lsには何が格納されているのだろうか。

open("| ls", "r") do |ls|
  p ls
end

結果。

#<IO:0x24540>

よくわかんね。
出力を受け取るだけではなく、コマンドを実行し入力を与えることも可能。

open("| bc -l", "w") do |calc|
  calc.puts "9/2"

end

結果。

2
4.50000000000000000000

openの第2引き数を"r"として、動かねー、動かねー、と唸っていたのは秘密です。


Ruby プログラミング基礎講座

Ruby プログラミング基礎講座