その他
    ホーム 技術発信 DoRuby rubyで外部コマンド実行

    rubyで外部コマンド実行

    この記事はアピリッツの技術ブログ「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