この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。
rubyからOSのコマンドやシェルなどの、外部コマンドを
実行する方法としていくつかあるようですので簡単にご紹介します。
バッククォートを使う
#!/usr/bin/ruby
result = `ls -lh`
単純な実行ならコレ。
system
#!/usr/bin/ruby
result = system(“ls -lh”)
print result
結果に真偽値が返ってきます。
exec
#!/usr/bin/ruby
begin
exec(“ls -lh”)
rescue
puts “error”
end
Kernelモジュール内。rescueでrubyの例外を拾えるのが特徴。
open
#!/usr/bin/ruby
result = open(“| ls -lh”)
print result.class # => IO
while !result.eof
print result.gets
end
result.close
ファイルのIOを行うときにopenを使いますが
引数のコマンドの前に「|」パイプを付けると、外部コマンドの実行が可能になります。
実行される外部コマンドの処理を非同期実行や子プロセスにするかなど、
の考慮が必要になりますので、要件に応じて使いわけると良いでしょう。
その他、open3やpopenを使うなど方法もあります。
環境:ruby 1.8.6