Ruby
 Computer >> コンピューター >  >> プログラミング >> Ruby

Rubyからシステムコマンドを実行する方法

Rubyから外部コマンドを実行したい場合…

wkhtmltopdfのように HTMLファイルをPDFに変換します。

使用できるRubyメソッドがいくつかあります。

使用する方法に応じて、異なる結果が得られます

これらの方法を一緒に探求しましょう!

Rubyシステムメソッド

Rubyシステム方式は、外部コマンドを実行する最も簡単な方法です。

このように見えます

system("ls")

systemに注意してください コマンド出力が発生したときに出力されます。

また、システムはRubyプログラムをコマンドが完了するまで待機させます

これを試してください:

system("sleep 2")

後で説明するように、バックグラウンドでコマンドを実行する方法があります。

システムは3つの可能な値を返すことができます :

  • true コマンドが機能した場合
  • false コマンドがエラーコードを返した場合
  • nil コマンドの実行に失敗した場合(コマンドが見つからない場合)

終了ステータスコードを取得できます $?で実行した最後の外部コマンドの グローバル変数。このステータスコードは、コマンドが失敗した理由に関する詳細情報を提供します。

シェル拡張とは何ですか?

systemで外部コマンドを実行する場合 「シェル拡張」効果が得られます。

シェル拡張とは、シェル(sh / bash / zsh)が特殊文字( * )を使用する場合です。 、 、および [ )コマンドから&ファイルリストに展開

例:

system("echo *")

これにより、現在のディレクトリ内のすべてのファイルとフォルダが印刷されます。

* コマンドが実行される前に、ファイルのリストに置き換えられます。

これらの特殊文字をそのまま使用する場合は、引数を2番目の引数として渡します システムの 。

このように:

system("echo", "*")

これで、出力は *になります 。

環境変数の使用方法

特定の環境変数を外部コマンドに渡したい場合は、最初の引数としてハッシュを使用できます

次に例を示します:

system({"rubyguides" => "best"}, "ruby", "-e p ENV['rubyguides']")

# "best"

これにより、Rubyアプリケーションの現在の環境が変更されることはありません。

%x /カーネル# `

実行しているコマンドから出力を取得する場合は、表示する代わりに、%xを使用できます。 またはKernel# ` メソッド。

彼らは同じことをします。

ここに例があります

`ls`

%xの別の :

%x|ls|

これらの2つの例は、出力を含む文字列を返します。 lsの コマンド。

スレッド内で実行しない限り、コマンドが終了するのを待つ必要があることに注意してください。

Fork+Execを使用して別のプロセスで外部コマンドを実行する方法

Forkingは現在のプロセス(Rubyアプリ)のコピーを作成し、execを使用してそのコピーを別のプロセスに置き換えることができます。 。

:forkメソッドはWindowsでは使用できません。

これはUnixの世界で人気のあるパターンです。

仕組みは次のとおりです

fork { exec("ls") }

これはlsを実行します 別のプロセスで出力を表示します。

このコマンドは別のプロセスで実行されているため Rubyアプリがsystemのように実行されるのをブロックすることはありません メソッドまたは%x

重要:

execを使用する場合 forkなし 現在のプロセスを置き換えます。

これは、Rubyプログラムが終了することを意味します。

外部プログラムとの双方向通信にPopenメソッドを使用する方法

必要な場合:

  • プロセスをより細かく制御
  • 双方向通信

次に、 IO.popen 方法はあなたが探しているものです。

次の例では、popenメソッドを使用して irbを起動します。 処理してから、入力を送信して出力を読み取ります。

ここに例があります

r = IO.popen("irb", "r+")

r.write "puts 123 + 1\n"

3.times { puts r.gets }

r.write "exit\n"

このr 変数はIOオブジェクトです。これは、通常のファイルのように変数から読み書きできることを意味します。 。

popenを使用する また、外部コマンドは独自のプロセスで実行されるため、スレッドで実行する必要はありません。

popen3もあります 標準ライブラリのメソッド。

通常のpopenとの違い 通常の出力メッセージとエラーメッセージを別々のIOオブジェクトに分割するということです。

結論

Rubyで外部コマンドを操作するさまざまな方法について学習しました。

これらに注意してください!

セキュリティが必要な場合を除いて、これらのコマンドにユーザー入力を渡さないでください。 Rubyアプリで問題が発生します。

新しいことを学んだ場合は、この記事を共有して、より多くの人に見てもらいましょう。

読んでくれてありがとう🙂


  1. Windows 10 からトロイの木馬を削除する方法?

    私たちの誰も、インターネットのない生活を想像することはできません。この現実を理解しているハッカーは、トロイの木馬やウイルスなどの危険を広めるためにそれを使用しています。これらの悪意のあるプログラムは、システムに侵入するだけでなく、システムを乗っ取ってお金を稼ぎます。したがって、適切な措置を講じて、PC への感染を阻止する必要があります。 ウイルス、トロイの木馬、マルウェアなどを検出して削除する最も簡単な方法 マルウェアは、ランサムウェア、ワーム、アドウェア、トロイの木馬などに使用される包括的な用語です。システムやスマートフォンに感染しようとする悪意のあるソフトウェアです。これらの感

  2. コマンド プロンプトまたは PowerShell からアプリをインストールする方法

    ソフトウェアのインストールは、複雑で反復的で、エラーが発生しやすいプロセスになる可能性があります。使用する前に、まずダウンロードしてインストール プロセスを開始し、インストールされるまで待つ必要があります。これには多くの時間がかかります。コマンド プロンプトからアプリをインストールする方法を学習することで、この時間を節約できます。同時に PowerShell からアプリをインストールすることもできます。 PowerShell とコマンド プロンプトは、Windows 10 または 11 にアプリケーションをシームレスにインストールできます。ただし、アプリのインストールに必要な手順は少し異なり