Open3.capture3Rubyで外部プログラムを実行する、たいがいのケースはOpen3.capture3でまかなえます。外部コマンドを実行し、標準出力・標準エラーを文字列で取れ、終了コードも受け取れます。標準入力に文字列を渡すこともできます。Open3.popen3Open3.capture*では、Rubyスクリプトは外部プログラムが終了するのを待って、それから次の処理に進みます。外部プログラムの終了を待つためのスレッドが取れます。ページを送り込み処理させる。プロセスの標準出力から処理結果を受け取る。Open3.popen3にはやや注意が必要です。systemバッククオートはコマンドを実行して、その標準出力を文字列として取得します。標準出力はそのまま出ていきます。0しかし、バッククオートとsystemでは標準エラー出力はとってこれません。終了コードもグローバル変数$?からとるなど、やや特殊です。スクリプトでは遅かれ早かれ、エラー処理のために標準エラー出力や終了コードが欲しくなります。使った方が統一的になるでしょう。irbから呼び出したりエラー処理を気にしない書き捨てスクリプトで使う分には手軽です。これらは、過去との互換性をとったり、C言語のプログラムを移植するためにあります。特別な理由が無い限りOpen3.*を使いましょう。Open3.*と同じようなことをするgemです。し、systemuは一時ファイルを使っているため遅いようです。Open3.*を使いましょう。「特別な理由」としては、ブロックを渡して、外部プログラムの実行に時間がかかった時に強制終了させたりできます。endahoward/systemu共通の注意点Rubyで外部プログラムを起動する方法はどれも、メタ文字を含む場合はシェル経由で実行します。エスケープが必要です。むすびRubyは優れた言語です。テストをしています)Enumerable#find_allは大好きです。Hash#fetchも大好きです。メソッドチェーンで配列からハッシュを構築するとβエンドルフィンが出ます。しても心の底からRubyを愛せないのです。トップレベルでも、オープンクラスでもなく、外部プログラムを起動する方法がわからないせいで*1、習得を諦めた苦い体験があったからかもしれません。この記事を、新たにRubyに手を染める若い人達に捧げます。*1:ググレカスと思われるかもしれません。Windowsしか知らず、周囲に相談できる先輩もいない少年にとり、当時の「IO.popenはpopen(3)です。以上」といった記述は心を砕くのに十分でした。21:36Tweet広告を非表示にする関連記事2015-11-06rbenv環境で特定バージョンのコマンドを実行する(特にrubocop)RBENV_VERSION環境変数を指定すればいい。月別アーカイブはてなブログをはじめよう!doloopwhileさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。